Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 16619|Antwoord: 0

[Interface] C# implementeert WeChat-betaling

[Link kopiëren]
Geplaatst op 15-03-2019 11:59:31 | | |

Onlangs was ik bezig met het ontwikkelen van officieel WeChat-account, en ik kwam wat problemen tegen met de WeChat-betaling, waardoor ik drie dagen in de war was, maar vandaag is het eindelijk gelukt. In deze periode wil ik enkele grote goden bedanken voor hun hulp, en ik zal mijn ervaring met hen delen zolang ze het goed hebben.

Voordat we WeChat Pay implementeren,

Ik moet naar het WeChat-ontwikkelingsplatform voor certificering, ik zal niet veel zeggen over deze authenticatie- en configuratieinformatie, hier is vooral vanaf codeniveau om betaling te realiseren.

Officiële documentatie: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7.

Gezien verschillende parameters in JS geef ik een hoofduitleg:


Tijdens het ontwikkelingsproces zijn er vier zeer belangrijke parameters: één is appid, AppSecret, apikey en merchant number. De appID in js hierboven is er één van. timeStamp is een tijdstempel, 10 cijfers, nonceStr is een willekeurig getal binnen 32 bits, de twee belangrijkste parameters hier, en de meest foutgevoelige zijn package en paySign. Laat me het je één voor één vertellen. Laten we het eerst over het pakket hebben, we moeten prepay_id hier gebruiken, deze parameter is het ordernummer dat door WeChat wordt gegenereerd, we moeten de unified order interface aanroepen om het te krijgen. Officiële documentatie: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1. Zoals je uit de documentatie kunt zien, zijn er om prepay_id te krijgen veel parameters nodig, en een van de belangrijkste parameters is de handtekening. Opmerking: De handtekening hier verschilt van de betalingshandtekening in JS. Er staan twee punten in het document van het ondertekende algoritme, en ik benadruk alleen twee punten. De ene is de volgorde van parameters, die volgens ASCII van klein naar groot moeten worden gesplitst, en de andere is dat de apikey niet fout mag zijn, waar is deze apikey? Log in op het handelsplatform om het in te stellen.

Na het samenvoegen van de strings die voor de handtekening nodig zijn, kan MD5-encryptie worden gebruikt om de handtekening te verkrijgen. Vervolgens combineer je de handtekening en alle voorgaande parameters tot een xml-formaatstring en roep je het interface-URL-adres aan:
https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。
Laten we het hebben over de laatste parameter in JS, PaySign: PaySign. Hetzelfde geldt voor het betalingshandtekening-algoritme, waarbij de andere 5 parameters in JS op volgorde worden gesplitst, plus apikey, MD5-encryptie, oké.
Het handtekeningalgoritme is hetzelfde, maar de parameterwaarden zijn verschillend. Hier is één ding om op te merken. Bij het betalen voor de handtekening worden het willekeurige getal nonceStr en de timestamp timeStamp gebruikt, en deze twee parameters worden gebruikt bij het ondertekenen
Als de waarden van deze twee parameters in JS hetzelfde zijn, zijn het hetzelfde willekeurige getal en dezelfde tijdstempel. Waarom? Hoewel de documentatie het niet zegt, is mijn begrip dat betalingshandtekeningen worden gegenereerd door willekeurige cijfers en tijdstempels,
Stuur dan bij het betalen het willekeurige nummer, de tijdstempel en de betalingshandtekening samen, en wanneer WeChat verifieert, wordt het ook gebaseerd op het willekeurige nummer en de tijdstempel in JS om een handtekening te genereren en deze te vergelijken met de betaalhandtekening die je hebt gestuurd.
Als je het nieuwe willekeurige nummer en tijdstempel in js opnieuw ophaalt, zal de berekende handtekening anders zijn dan de handtekening die je hebt verzonden, en wordt er een foutmelding gemeld: handtekening mislukt.

Dat is allemaal voor het codeniveau, en natuurlijk zijn er nog een paar andere punten om op te merken. Bijvoorbeeld, de nuttige openid-parameter moet ook worden verkregen door de interface aan te roepen, en of de directory voor betalingsautorisatie correct is geconfigureerd.
De samenvatting van de laatste zin: Kijk goed naar het document, en vraag tenslotte aan anderen, je kunt WeChat-betalingsgroepen vinden, er staan veel goden in, ik had eerder een probleem en worstelde twee dagen zonder het op te lossen (soms is alleen het bekijken van het document niet genoeg),
Daarna voegde hij boos 8 WeChat-ontwikkelingsgroepen toe en kwam uiteindelijk naar buiten onder leiding van de experts. Nogmaals bedankt. Programmeurs zijn een groep mensen die graag delen en ze delen graag wat ze weten. Dus als je het niet begrijpt, vraag dan meer.






Vorig:Voorbeeld van de pushtemplate-berichtfunctie van de C# WeChat-interface
Volgend:Ik heb een gevoel over het klantenservicesysteem van grote bedrijven
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com