|
Ostatnio tworzyłem oficjalne konto na WeChat i napotkałem problemy z płatnościami na WeChat, przez co przez 3 dni byłem zdezorientowany, ale dziś w końcu udało mi się to zrobić. W tym czasie chciałbym podziękować wielkim bogom za ich pomoc i podzielę się z nimi moimi doświadczeniami, póki będą gorące. Przed wdrożeniem WeChat Pay, Muszę udać się do platformy deweloperskiej WeChat po certyfikację, nie będę dużo mówił o tych informacjach o uwierzytelnianiu i konfiguracji, tutaj głównie z poziomu kodu, aby zrealizować płatności. Oficjalna dokumentacja: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7. Stawiając czoła kilku parametrom w JS, przedstawię główne wyjaśnienie:
W trakcie procesu tworzenia istnieją 4 bardzo ważne parametry: jeden to appid, AppSecret, apikey oraz numer handlowca. AppID w js powyżej jest jednym z nich. timeStamp to znacznik czasowy, 10 cyfr, nonceStr to liczba losowa, mieszcząca się w 32 bitach, dwa najważniejsze parametry tutaj i najbardziej podatne na błędy to package i paySign. Pozwól, że opowiem wam po kolei. Porozmawiajmy najpierw o pakiecie, musimy użyć prepay_id tutaj – ten parametr to numer zamówienia wygenerowany przez WeChat, musimy wywołać zunifikowany interfejs zamówienia, aby go otrzymać. Oficjalna dokumentacja: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1. Jak widać w dokumentacji, aby uzyskać prepay_id, potrzeba wielu parametrów, a jednym z najważniejszych jest podpis. Uwaga: Podpis tutaj różni się od podpisu płatności w JS. W dokumencie podpisanego algorytmu są dwa punkty, na które zwracam uwagę. Jeden to kolejność parametrów, które muszą być połączone zgodnie z ASCII od małych do dużych, a drugi, że apikey nie może być błędny, gdzie jest ten apikey? Zaloguj się na platformie handlowej, aby ją skonfigurować. Po połączeniu ciągów znaków wymaganych do podpisu, można użyć szyfrowania MD5 do uzyskania podpisu. Następnie połącz sygnaturę i wszystkie poprzednie parametry w ciąg w formacie xml i wywołaj adres URL interfejsu:
https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。 Porozmawiajmy o ostatnim parametrze w JS, PaySign: PaySign. To samo dotyczy algorytmu podpisu płatniczego, łączącego pozostałe 5 parametrów w JS w kolejności, plus apikey, szyfrowanie MD5, ok. Algorytm sygnatury jest taki sam, ale wartości parametrów są różne. Warto zauważyć jedną rzecz. Podczas płatności za podpis używa się losowej liczby nonceStr oraz znacznika czasu timeStamp, a te dwa parametry są wykorzystywane podczas podpisywania Jeśli wartości tych dwóch parametrów w JS są takie same, to ta sama liczba losowa i ten sam znacznik czasu. Dlaczego? Chociaż dokumentacja tego nie mówi, z tego co rozumiem, podpisy płatności są generowane przez losowe liczby i znaczniki czasu, Następnie, podczas płatności, wyślij losową liczbę, znacznik czasu i podpis płatności, a gdy WeChat to zweryfikowa, będzie to również oparte na losowej liczbie i znaczniku czasu w JS, aby wygenerować podpis i porównać go z wysłanym podpisem płatności. Jeśli ponownie uzyskasz nową losową liczbę i znacznik czasu w js, obliczony podpis będzie inny niż ten, który wysłałeś, a błąd zostanie zgłoszony: podpis nie powiódł.
To wszystko na poziomie kodu, a oczywiście warto zwrócić uwagę na kilka innych kwestii. Na przykład użyteczny parametr openid również należy uzyskać wywołując interfejs oraz sprawdzić, czy katalog autoryzacji płatności jest poprawnie skonfigurowany. Podsumowanie ostatniego zdania: Dokładnie przyjrzyj się dokumentowi, a na końcu zapytaj innych, znajdziesz grupy związane z płatnościami na WeChat, jest tam wielu bogów, miałem kiedyś problem i przez 2 dni walczyłem bez jego rozwiązania (czasem samo spojrzenie na dokument nie wystarcza), Następnie ze złością dodał 8 grup deweloperskich na WeChat i ostatecznie wyszedł pod kierunkiem ekspertów. Jeszcze raz dziękuję. Programiści to grupa ludzi, którzy uwielbiają dzielić się i chętnie dzielą się tym, co wiedzą. Więc gdy nie rozumiesz, pytaj więcej.
|