|
Äskettäin tein WeChatin virallista tilin kehitystä ja kohtasin ongelmia WeChat-maksujen kanssa, ja olin hämmentynyt kolme päivää, mutta tänään sain sen vihdoin tehtyä. Tänä aikana haluan kiittää suuria jumalia heidän avustaan, ja jaan kokemukseni heidän kanssaan, kun he ovat kuumia. Ennen WeChat Payn käyttöönottoa, Minun täytyy mennä WeChatin kehitysalustalle sertifiointia varten, en kerro paljoa näistä tunnistautumis- ja konfiguraatiotiedoista, tässä on pääasiassa kooditaso maksun toteuttamiseksi. Virallinen dokumentaatio: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7. Useiden JS:n parametrien edessä annan pääselityksen:
Kehitysprosessin aikana on neljä erittäin tärkeää parametria: yksi on appid, AppSecret, apikey ja kauppiasnumero. Yllä oleva appID js:ssä on yksi niistä. timeStamp on aikaleima, 10 numeroa, nonceStr on satunnaisluku, 32 bitin sisällä, kaksi tärkeintä parametria tässä ja virhealttiimpia ovat paketti ja paySign. Kerron teille yksi kerrallaan. Puhutaan ensin paketista, meidän täytyy käyttää prepay_id tässä, tämä parametri on WeChatin generoima tilausnumero, meidän täytyy kutsua yhtenäinen järjestysrajapinta saadaksemme sen. Virallinen dokumentaatio: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1. Kuten dokumentaatiosta näet, prepay_id saamiseksi tarvitaan monia parametreja, ja yksi tärkeimmistä parametreista on allekirjoitus. Huomautus: Tässä oleva allekirjoitus eroaa JS:n maksuallekirjoituksesta. Allekirjoitetussa algoritmidokumentissa on kaksi kohtaa, ja korostan vain kahta kohtaa. Yksi on parametrien järjestys, joka täytyy yhdistää ASCII:n mukaan pienestä suureen, ja toinen on, että apikey ei saa olla väärässä, missä tämä apikey on? Kirjaudu kauppiaiden alustalle ja aseta se. Kun allekirjoitukseen tarvittavat merkkijonot on liitetty, voidaan käyttää MD5-salausta allekirjoituksen saamiseksi. Yhdistä sitten allekirjoitus ja kaikki aiemmat parametrit xml-muotomerkkijonoksi ja kutsu rajapinnan URL-osoite:
https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。 Puhutaanpa JS:n viimeisestä parametrista, PaySign: PaySign. Sama pätee maksuallekirjoitusalgoritmiin, jossa muut 5 parametria on liitetty JS:ssä järjestyksessä, plus apikey, MD5-salaus, ok. Allekirjoitusalgoritmi on sama, mutta parametrien arvot ovat erilaiset. Tässä yksi asia, joka kannattaa huomioida. Allekirjoituksesta maksettaessa käytetään satunnaista numeroa nonceStr ja aikaleimaa timeStamp, ja näitä kahta parametria käytetään allekirjoituksessa Jos näiden kahden parametrin arvot JS:ssä ovat samat, ne ovat sama satunnaisluku ja sama aikaleima. Miksi? Vaikka dokumentaatiossa ei sanota sitä, ymmärtääkseni maksuallekirjoitukset syntyvät satunnaisilla numeroilla ja aikaleimoilla, Sitten maksaessasi lähetä satunnainen numero, aikaleima ja maksuallekirjoitus yhdessä, ja kun WeChat vahvistaa asian, se perustuu myös satunnaiseen numeroon ja aikaleimaan JS:ssä, jotta allekirjoitus voidaan luoda ja verrata sitä lähettämääsi maksuallekirjoitukseen. Jos saat uuden satunnaisnumeron ja aikaleiman uudelleen js:llä, laskettu allekirjoitus poikkeaa lähettämästäsi allekirjoituksesta, ja virhe raportoidaan: allekirjoitus epäonnistui.
Siinä kaikki kooditasolle, ja tietysti on muutama muukin huomionarvoinen seikka. Esimerkiksi hyödyllinen openid-parametri täytyy myös saada kutsumalla rajapintaa ja selvittämällä, onko maksuvaltuutushakemisto oikein konfiguroitu. Viimeinen lauseen yhteenveto: Katso dokumenttia huolellisesti ja kysy lopuksi muilta, löydät WeChat-maksuihin liittyviä ryhmiä, siellä on monia jumalia, olen kohdannut ongelman aiemmin ja kamppaillut kaksi päivää ratkaisematta sitä, (joskus pelkkä dokumentin katsominen ei riitä), Sitten hän vihaisena lisäsi 8 WeChat-kehitysryhmää ja lopulta tuli asiantuntijoiden ohjauksessa. Kiitos vielä kerran. Ohjelmoijat ovat joukko ihmisiä, jotka rakastavat jakaa ja jakavat mielellään tietonsa. Joten kun et ymmärrä, kysy lisää.
|