|
Нещодавно я займався розробкою офіційного акаунта 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, там багато богів, я раніше стикався з проблемою і два дні боровся, не розв'язуючи її (іноді просто перегляд документа недостатньо). Потім він сердито додав 8 груп розробки WeChat і нарешті вийшов під керівництвом експертів. Ще раз дякую. Програмісти — це група людей, які люблять ділитися і із задоволенням діляться тим, що знають. Тож якщо не розумієш — питай більше.
|