|
Neseniai kūriau oficialią "WeChat" paskyrą ir susidūriau su tam tikromis problemomis dėl "WeChat" mokėjimo ir 3 dienas buvau sutrikęs, bet šiandien pagaliau tai padariau. Šiuo laikotarpiu norėčiau padėkoti kai kuriems didžiems dievams už pagalbą ir pasidalinsiu savo patirtimi su jais, kol jie bus karšti. Prieš diegdami "WeChat Pay", Man reikia eiti į "WeChat" kūrimo platformą sertifikavimui, daug nepasakysiu apie šią autentifikavimo ir konfigūracijos informaciją, čia daugiausia iš kodo lygio, kad galėčiau realizuoti mokėjimą. Oficialūs dokumentai: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7. Susidūręs su keliais JS parametrais, pateiksiu pagrindinį paaiškinimą:
Kūrimo procese yra 4 labai svarbūs parametrai: vienas yra appid, AppSecret, apikey ir prekybininko numeris. AppID js aukščiau yra vienas iš jų. timeStamp yra laiko žyma, 10 skaitmenų, nonceStr yra atsitiktinis skaičius, per 32 bitus, du svarbiausi parametrai čia, ir labiausiai klaidų linkę yra paketas ir paySign. Leiskite man papasakoti po vieną. Pirmiausia pakalbėkime apie paketą, čia turime prepay_id naudoti, šis parametras yra "WeChat" sugeneruotas užsakymo numeris, kad jį gautume, turime paskambinti į vieningą užsakymo sąsają. Oficialūs dokumentai: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1. Kaip matote iš dokumentacijos, norint gauti prepay_id, reikia daug parametrų, o vienas iš svarbiausių parametrų yra parašas. Pastaba: parašas čia skiriasi nuo mokėjimo parašo JS. Pasirašytame algoritmo dokumente yra du punktai, ir aš tik pabrėžiu du dalykus. Vienas yra parametrų tvarka, kuri turi būti sujungta pagal ASCII nuo mažo iki didelio, o kita yra ta, kad apikey neturi būti klaidingas, kur yra šis apikey? Prisijunkite prie prekybininko platformos, kad ją nustatytumėte. Sujungus parašui reikalingas eilutes, parašui gauti galima naudoti MD5 šifravimą. Tada sujunkite parašą ir visus ankstesnius parametrus į xml formato eilutę ir iškvieskite sąsajos URL adresą:
https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。 Pakalbėkime apie paskutinį JS parametrą "PaySign": "PaySign". Tas pats pasakytina ir apie mokėjimo parašo algoritmą, sujungiant kitus 5 parametrus JS eilės tvarka, plius apikey, MD5 šifravimas, gerai. Parašo algoritmas yra tas pats, tačiau parametrų reikšmės skiriasi. Štai vienas dalykas, į kurį reikia atkreipti dėmesį. Mokant už parašą, naudojamas atsitiktinis skaičius nonceStr ir laiko žyma timeStamp, o šie du parametrai naudojami pasirašant Jei šių dviejų parametrų reikšmės JS yra vienodos, jos yra tas pats atsitiktinis skaičius ir ta pati laiko žyma. Kodėl? Nors dokumentuose to nesakoma, mano supratimu, mokėjimo parašai generuojami atsitiktiniais skaičiais ir laiko žymomis, Tada mokėdami kartu išsiųskite atsitiktinį numerį, laiko žymą ir mokėjimo parašą, tada, kai "WeChat" patvirtins, jis taip pat bus pagrįstas atsitiktiniu numeriu ir laiko žyma JS, kad sugeneruotų parašą ir palygintų jį su jūsų atsiųstu mokėjimo parašu. Jei iš naujo gausite naują atsitiktinį skaičių ir laiko žymą js, apskaičiuotas parašas skirsis nuo jūsų išsiųsto parašo ir bus pranešta apie klaidą: parašas nepavyko.
Tai viskas kodo lygiui ir, žinoma, reikia atkreipti dėmesį į keletą kitų dalykų. Pavyzdžiui, naudingą openid parametrą taip pat reikia gauti iškviečiant sąsają ir ar teisingai sukonfigūruotas mokėjimo autorizacijos katalogas. Paskutinio sakinio santrauka: atidžiai pažvelkite į dokumentą ir galiausiai paklauskite kitų, galite rasti su "WeChat" mokėjimais susijusių grupių, jame yra daug dievų, anksčiau susidūriau su problema ir 2 dienas kovojau jos neišsprendęs (kartais nepakanka tik pažvelgti į dokumentą), Tada jis piktai pridėjo 8 "WeChat" kūrimo grupes ir galiausiai išėjo vadovaujamas ekspertų. Dar kartą ačiū. Programuotojai yra grupė žmonių, kurie mėgsta dalytis ir mielai dalijasi tuo, ką žino. Taigi, kai nesuprantate, paklauskite daugiau.
|