|
Наскоро правех официална разработка на WeChat акаунт и срещнах някои проблеми с плащането в WeChat, бях объркан три дни, но днес най-накрая успях да го направя. През този период бих искал да благодаря на някои велики богове за тяхната помощ и ще споделя своя опит с тях, докато са горещи. Преди да внедрим WeChat Pay, Трябва да отида на платформата за разработка на WeChat за сертификация, няма да казвам много за тази информация за автентикация и конфигурация, тук е основно от нивото на код, за да се реализира плащането. Официална документация: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7. Като се сблъсквам с няколко параметъра в JS, ще дам основно обяснение:
По време на процеса на разработка има 4 много важни параметъра: един е appid, AppSecret, apikey и номер на търговец. AppID в js по-горе е един от тях. timeStamp е времева марка, 10 цифри, nonceStr е случайно число, в рамките на 32 бита, двата най-важни параметъра тук, а най-податливите на грешки са package и paySign. Нека ви разкажа едно по едно. Нека първо поговорим за пакета, тук трябва да използваме prepay_id, този параметър е номерът на поръчката, генериран от WeChat, трябва да извикаме интерфейса за унифициран ред, за да го получим. Официална документация: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1. Както се вижда от документацията, за да се постигне prepay_id, са необходими много параметри, а един от най-важните параметри е подписът. Забележка: Подписът тук е различен от този при плащане в JS. Има две точки в подписания алгоритъм документ и аз просто подчертавам две точки. Единият е редът на параметрите, които трябва да се сплитат според ASCII от малък към голям, а другият е, че APIKEY не трябва да е грешен, къде е този apikey? Влезте в търговската платформа, за да я настроите. След сплайсване на низовете, необходими за подписа, може да се използва MD5 криптиране за получаване на подписа. След това комбинирайте подписа и всички предишни параметри в xml форматен низ и извикайте URL адреса на интерфейса:
https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。 Нека поговорим за последния параметър в JS, PaySign: PaySign. Същото важи и за алгоритъма за подпис на плащанията, където другите 5 параметъра в JS се плъзгат по ред, плюс apikey, MD5 криптиране, добре. Алгоритъмът за подпис е същият, но стойностите на параметрите са различни. Ето едно нещо, което трябва да се отбележи. При плащане за подписа се използват случайното число nonceStr и timeStamp timeStamp, като тези два параметъра се използват при подписване Ако стойностите на тези два параметъра в JS са еднакви, те са едно и също случайно число и еднакъв времеви печат. Защо? Въпреки че документацията не го казва, доколкото знам, подписите за плащане се генерират от случайни числа и времеви печати, След това, когато плащате, изпратете случайния номер, времевия печат и подписа за плащане заедно, а когато WeChat провери, ще се базира и на случайния номер и времеви печат в JS, за да се генерира подпис и да се сравни с изпратения от вас подпис. Ако получиш отново новия случаен номер и времеви печат в js, изчисленият подпис ще бъде различен от изпратения от теб подпис и ще бъде докладвана грешка: подписът не е успял.
Това е всичко за ниво код, а разбира се, има и още няколко точки, които трябва да се отбележат. Например, полезният параметър openid също трябва да бъде получен чрез извикване на интерфейса и дали директорията за разрешение за плащане е конфигурирана правилно. Резюме на последното изречение: Разгледайте внимателно документа и накрая попитайте другите, можете да намерите WeChat групи, свързани с плащания, в тях има много богове, аз се сблъсквах с проблем и се борих 2 дни без да го реша (понякога само гледането на документа не е достатъчно). После гневно добави 8 групи за разработка в WeChat и най-накрая излезе под ръководството на експертите. Още веднъж благодаря. Програмистите са група хора, които обичат да споделят и с удоволствие споделят това, което знаят. Затова, когато не разбираш, питай още.
|