|
Nylig holdt jeg på med utvikling av WeChat offisielle kontoer, og jeg støtte på noen problemer med WeChat-betalingen, og jeg var forvirret i 3 dager, men i dag fikk jeg det endelig gjort. I denne perioden vil jeg takke noen store guder for deres hjelp, og jeg vil dele min opplevelse med dem mens de er hete. Før vi implementerer WeChat Pay, Jeg må gå til WeChat-utviklingsplattformen for sertifisering, jeg vil ikke si så mye om denne autentiserings- og konfigurasjonsinformasjonen, her er det hovedsakelig fra kodenivå for å realisere betaling. Offisiell dokumentasjon: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7. Med tanke på flere parametere i JS, vil jeg gi en hovedforklaring:
Under utviklingsprosessen er det fire svært viktige parametere: én er appid, AppSecret, apikey og forhandlernummer. AppID-en i js over er en av dem. timeStamp er et tidsstempel, 10 sifre, nonceStr er et tilfeldig tall, innenfor 32 biter, de to viktigste parameterne her, og de mest feilutsatte er package og paySign. La meg fortelle deg én etter én. La oss snakke om pakken først, vi må bruke prepay_id her, denne parameteren er ordrenummeret generert av WeChat, vi må kalle det enhetlige ordregrensesnittet for å hente det. Offisiell dokumentasjon: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1. Som du kan se i dokumentasjonen, trengs mange parametere for å få prepay_id, og en av de viktigste parameterne er signaturen. Merk: Signaturen her er forskjellig fra betalingssignaturen i JS. Det er to punkter i det signerte algoritmedokumentet, og jeg understreker bare to punkter. Den ene er rekkefølgen på parametere, som må spleises i henhold til ASCII fra liten til stor, og den andre er at apikeyen ikke må være feil, hvor er denne apikeyen? Logg inn på handelsplattformen for å sette det opp. Etter å ha spleiset strengene som kreves for signaturen, kan MD5-kryptering brukes for å hente signaturen. Deretter kombinerer du signaturen og alle tidligere parametere til en xml-formatering, og kaller grensesnittets URL-adresse:
https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。 La oss snakke om den siste parameteren i JS, PaySign: PaySign. Det samme gjelder betalingssignaturalgoritmen, hvor de andre 5 parameterne i JS er koblet i rekkefølge, pluss apikey, MD5-kryptering, ok. Signaturalgoritmen er den samme, men parameterverdiene er forskjellige. Her er én ting å merke seg. Når man betaler for signaturen, brukes det tilfeldige tallet nonceStr og tidsstempelet, og disse to parameterne brukes ved signering Hvis verdiene til disse to parameterne i JS er de samme, er de samme tilfeldige tall og samme tidsstempel. Hvorfor? Selv om dokumentasjonen ikke sier det, er min forståelse at betalingssignaturer genereres av tilfeldige tall og tidsstempler, Når du betaler, send det tilfeldige tallet, tidsstempelet og betalingssignaturen sammen, og når WeChat verifiserer, vil det også baseres på det tilfeldige tallet og tidsstempelet i JS for å generere en signatur og sammenligne den med betalingssignaturen du sendte. Hvis du henter det nye tilfeldige tallet og tidsstempelet på nytt i js, vil den beregnede signaturen være annerledes enn signaturen du sendte, og en feil vil bli rapportert: signaturen feilet.
Det er alt for kodenivået, og selvfølgelig er det noen andre punkter å merke seg. For eksempel må den nyttige openid-parameteren også hentes ved å kalle grensesnittet, og om katalogen for betalingsautorisasjon er korrekt konfigurert. Oppsummering av siste setning: Se nøye på dokumentet, og spør til slutt andre, du kan finne betalingsrelaterte grupper på WeChat, det er mange guder i det, jeg støtte på et problem før og slet i 2 dager uten å løse det, (noen ganger er det ikke nok bare å se på dokumentet), Deretter la han sint til 8 WeChat-utviklingsgrupper, og kom til slutt ut under veiledning av ekspertene. Takk igjen. Programmerere er en gruppe mennesker som elsker å dele, og de deler mer enn gjerne det de vet. Så når du ikke forstår, spør mer.
|