|
Recent, făceam dezvoltarea contului oficial WeChat și am întâmpinat unele probleme cu plata WeChat, am fost confuz timp de 3 zile, dar astăzi în sfârșit am reușit. În această perioadă, aș dori să le mulțumesc unor zei mari pentru ajutor și le voi împărtăși experiența mea cât timp le este cald. Înainte de a implementa WeChat Pay, Trebuie să merg pe platforma de dezvoltare WeChat pentru certificare, nu voi spune prea multe despre aceste informații de autentificare și configurare, aici este în principal la nivel de cod pentru a realiza plata. Documentație oficială: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7. Confruntându-mă cu mai mulți parametri în JS, voi oferi o explicație principală:
În timpul procesului de dezvoltare, există 4 parametri foarte importanți: unul este appid, AppSecret, apikey și numărul comerciantului. AppID-ul din js de mai sus este unul dintre ele. timeStamp este un timestamp, 10 cifre, nonceStr este un număr aleatoriu, cu o diferență de 32 de biți, cei doi parametri cei mai importanți aici, iar cei mai predispuși la erori sunt package și paySign. Lasă-mă să-ți spun unul câte unul. Să vorbim mai întâi despre pachet, trebuie să folosim prepay_id aici, acest parametru este numărul de comandă generat de WeChat, trebuie să apelăm la interfața unificată de comandă pentru a-l obține. Documentație oficială: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1. După cum puteți vedea din documentație, pentru a obține prepay_id sunt necesari mulți parametri, iar unul dintre cei mai importanți parametri este semnătura. Notă: Semnătura de aici este diferită de semnătura de plată din JS. Există două puncte în documentul algoritmului semnat, iar eu subliniez doar două puncte. Unul este ordinea parametrilor, care trebuie spliced conform ASCII de la mic la mare, iar celălalt este că apikey-ul nu trebuie să fie greșit, unde este acest apikey? Conectează-te pe platforma comercianților pentru a o configura. După splicarea șirurilor necesare pentru semnătură, se poate folosi criptarea MD5 pentru a obține semnătura. Apoi combină semnătura și toți parametrii anteriori într-un șir de format xml și apelează adresa URL a interfeței:
https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。 Să vorbim despre ultimul parametru din JS, PaySign: PaySign. La fel se întâmplă și cu algoritmul de semnătură a plății, îmbinând ceilalți 5 parametri în JS în ordine, plus apikey, criptare MD5, ok. Algoritmul de semnătură este același, dar valorile parametrilor sunt diferite. Iată un lucru de menționat. La plata pentru semnătură, se folosesc numărul aleator nonceStr și timeStamp-ul de timp, iar acești doi parametri sunt folosiți la semnare Dacă valorile acestor doi parametri în JS sunt aceleași, atunci sunt același număr aleator și același timestamp. De ce? Deși documentația nu spune asta, din câte înțeleg, semnăturile de plată sunt generate de numere aleatorii și marcaje temporale, Apoi, când plătești, trimite împreună numărul aleatoriu, marca temporală și semnătura de plată, iar când WeChat verifică, se va baza și pe numărul aleatoriu și marca temporală din JS pentru a genera o semnătură și a o compara cu semnătura de plată pe care ai trimis-o. Dacă re-obții noul număr aleator și ora în js, semnătura calculată va fi diferită de cea pe care ai trimis-o, iar o eroare va fi raportată: semnătura eșuată.
Asta ține de nivelul codului și, desigur, mai sunt câteva aspecte de menționat. De exemplu, parametrul openid util trebuie obținut și prin apelarea interfeței și dacă directorul pentru autorizarea plăților este configurat corect. Rezumatul ultimei propoziții: Uită-te cu atenție la document și, în final, întreabă și pe alții, poți găsi grupuri WeChat legate de plăți, sunt mulți zei în el, am mai întâlnit o problemă înainte și m-am chinuit timp de 2 zile fără să o rezolv (uneori doar uitarea la document nu este suficientă), Apoi, furios, a adăugat 8 grupuri de dezvoltare pe WeChat și, în cele din urmă, a ieșit sub îndrumarea experților. Mulțumesc din nou. Programatorii sunt un grup de oameni care adoră să împărtășească și sunt mai mult decât bucuroși să împărtășească ceea ce știu. Așa că, atunci când nu înțelegi, întreabă mai mult.
|