|
最近、WeChatの公式アカウント開発をしていたとき、WeChatの支払いでいくつか問題が発生し、3日間混乱していましたが、今日ようやく手続きが完了しました。 この期間中、偉大な神々の助けに感謝したいと思いますし、彼らが熱いうちに私の経験を共有したいと思います。 WeChat Payを導入する前に、 認証のためにWeChatの開発プラットフォームに行く必要がありますが、認証や設定情報についてはあまり詳しくは言いません。主にコードレベルから支払いを実現するための内容です。 公式文書:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7。 JSでいくつかのパラメータを踏まえ、主要な説明をします。
開発プロセス中には4つの非常に重要なパラメータがあります。1つはappid、AppSecret、apikey、そしてmerchant numberです。 上記のjsのappIDはその一つです。 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の支払い署名とは異なります。 署名アルゴリズムの文書には2つのポイントがありますが、私は2つのポイントを強調します。 1つはパラメータの順序で、ASCIIに従って小さいから大きいにスプライスする必要があります。もう1つは、apikeyが間違ってはいけない、そのapikeyはどこにあるのかということです。 マーチャントプラットフォームにログインして設定してください。 署名に必要な文字列をスプライスした後、MD5暗号化を使って署名を取得することができます。 次に、署名と前述のすべてのパラメータをXML形式の文字列にまとめ、インターフェースのURLアドレスを呼び出します。
https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。 JSの最後のパラメータ、PaySignについて話しましょう。 決済署名アルゴリズムも同様で、他の5つのパラメータをJSで順番にスプライスし、さらにapikeyやMD5暗号化も加えています。 シグネチャアルゴリズムは同じですが、パラメータ値が異なります。 ここで一つ注意すべきことがあります。 署名の支払いにはランダムな数のnonceStrとタイムスタンプのタイムスタンプが使われ、署名時にこれら2つのパラメータが使われます これら2つのパラメータの値がJSで同じであれば、同じ乱数かつ同じタイムスタンプとなります。 なぜでしょうか。 ドキュメントには明記されていませんが、私の理解では支払い署名はランダムな数字とタイムスタンプで生成されます。 支払いの際には、ランダムな番号、タイムスタンプ、支払い署名を一緒に送り、WeChatが検証する際には、JSのランダムな番号とタイムスタンプを基に署名を作成し、送信した支払い署名と比較します。 新しい乱数とタイムスタンプをjsで再取得すると、計算された署名が送信したものと異なり、エラーが報告されます:署名失敗。
コードレベルについては以上で、もちろん他にもいくつか注意すべき点があります。 例えば、有用なopenidパラメータはインターフェースを呼び出し、支払い承認ディレクトリが正しく設定されているかどうかも確認する必要があります。 最後の一文の要約:ドキュメントをよく見て、最後に他の人に聞いてみてください。WeChatの決済関連グループはたくさんあります。多くの神がいます。以前問題に直面して2日間も解決できずに苦労しました。(時にはドキュメントを見るだけでは足りないこともあります)、 その後、彼は怒りながら8つのWeChat開発グループを追加し、最終的に専門家の指導のもとで出てきました。 改めてありがとうございます。 プログラマーは共有を大切にし、自分の知識を共有することを喜んで共有する人々の集まりです。 だから理解できないときは、もっと聞いてください。
|