|
For nylig lavede jeg WeChats officielle kontoudvikling, og jeg stødte på nogle problemer med WeChat-betalingen, og jeg var forvirret i 3 dage, men i dag fik jeg det endelig gjort. I denne periode vil jeg gerne takke nogle store guder for deres hjælp, og jeg vil dele min oplevelse med dem, mens de er varme. Før vi implementerer WeChat Pay, Jeg skal til WeChat-udviklingsplatformen for certificering, jeg vil ikke sige så meget om disse autentificerings- og konfigurationsoplysninger, her er det primært fra kodeniveauet for at realisere betalingen. Officiel dokumentation: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7. Med flere parametre i JS vil jeg give en hovedforklaring:
Under udviklingsprocessen er der fire meget vigtige parametre: den ene er appid, AppSecret, apikey og forhandlernummer. AppID'en i js ovenfor er en af dem. timeStamp er et tidsstempel, 10 cifre, nonceStr er et tilfældigt tal inden for 32 bit, de to vigtigste parametre her, og de mest fejludsatte er package og paySign. Lad mig fortælle dig det én efter én. Lad os tale om pakken først, vi skal bruge prepay_id her, denne parameter er ordrenummeret genereret af WeChat, vi skal kalde det samlede ordreinterface for at få det. Officiel dokumentation: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1. Som du kan se i dokumentationen, kræves der mange parametre for at få prepay_id, og en af de vigtigste parametre er signaturen. Bemærk: Signaturen her er forskellig fra betalingssignaturen i JS. Der er to punkter i det signerede algoritmedokument, og jeg understreger bare to punkter. Den ene er rækkefølgen af parametre, som skal splejses i henhold til ASCII fra lille til stor, og den anden er, at apikeyen ikke må være forkert, hvor er denne apikey? Log ind på forhandlerplatformen for at sætte det op. Efter at have splejset de strenge, der kræves til signaturen, kan MD5-kryptering bruges til at opnå signaturen. Kombiner derefter signaturen og alle de tidligere parametre i en xml-formatstreng, og kald interfacets URL-adresse:
https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。 Lad os tale om den sidste parameter i JS, PaySign: PaySign. Det samme gælder betalingssignaturalgoritmen, hvor de andre 5 parametre i JS sammensættes i rækkefølge, plus apikey, MD5-kryptering, okay. Signaturalgoritmen er den samme, men parameterværdierne er forskellige. Her er én ting at bemærke. Når man betaler for underskriften, bruges det tilfældige tal nonceStr og tidsstemplet timeStamp, og disse to parametre bruges ved underskrivelse Hvis værdierne af disse to parametre i JS er de samme, er de det samme tilfældige tal og samme tidsstempel. Hvorfor? Selvom dokumentationen ikke siger det, er min forståelse, at betalingssignaturer genereres af tilfældige tal og tidsstempler, Når du betaler, sender du det tilfældige nummer, tidsstempel og betalingssignatur sammen, og når WeChat verificerer, vil det også være baseret på det tilfældige nummer og tidsstempel i JS for at generere en signatur og sammenligne den med den betalingssignatur, du sendte. Hvis du genfinder det nye tilfældige tal og tidsstempel i js, vil den beregnede signatur være anderledes end den signatur, du sendte, og der vil blive rapporteret en fejl: signaturen fejlede.
Det er alt for kodeniveauet, og selvfølgelig er der et par andre punkter at bemærke. For eksempel skal den nyttige openid-parameter også opnås ved at kalde interfacet, og om kataloget til betalingsautorisation er korrekt konfigureret. Den sidste sætning opsummering: Se grundigt på dokumentet, og spørg endelig andre, du kan finde WeChat-betalingsrelaterede grupper, der er mange guder i det, jeg stødte på et problem før og kæmpede i 2 dage uden at løse det (nogle gange er det ikke nok bare at kigge på dokumentet), Derefter tilføjede han vredt 8 WeChat-udviklingsgrupper og kom endelig ud under eksperternes vejledning. Tak igen. Programmører er en gruppe mennesker, der elsker at dele, og de deler mere end gerne det, de ved. Så når du ikke forstår, så spørg mere.
|