ウィチャットのスキャンコードの支払い、小さなプログラムの支払いのいくつかの穴をまとめます
微信の支払いインタフェースを呼び出す中でいろいろな問題に直面して、本当にどの人が書いたインタフェースのドキュメントなのか分からないで、いくつかの簡単なインタフェースは何日も調整しました.
1、小さいプログラムはcode 2 Sessionを取得する時errcodeが間違いを犯す時エラーコードを返すことができて、しかし正常な時意外にもこのフィールドさえ返さないで、約束した正常は0を返しますか?
2、小プログラム支払いのタイムスタンプパラメータは、小プログラム支払いインタフェースを呼び出すときにバックグラウンドで署名を生成する必要があり、timeStampパラメータがあり、ドキュメントには現在の時間と書かれている.ここには秒レベルのピットがあり、javaで直接Systemを使用する場合は、秒レベルにする必要がある.CurrentTimeMillis()はダメ!署名エラーが表示されます.
正しい方法はシステムです.currentTimeMillis()/1000
3、ウィジェットが署名を支払うときkeyはつなぎ合わせるので、ドキュメントには明記されていませんが、例にはどれを基準にしているのか分かりません.
4、すべての署名をMD 5に統一することを提案します.そうしないと、どこが他の署名を黙認しているのか分かりません.
5、ウィジェット決済、つまり取引タイプがJSAPIの場合はopenIdを転送します.またappId appkey sercrt mechIdなどは対応しないと署名に失敗することがありますので注意してください.
6、微信はdemoの中のコードの大きな穴を支払って、その中に1段あります:
注意ここでは必ず変更し、統一されたMD 5に変更します.
そうでなければ、支払い成功結果通知を受け取るときにどうしていつも署名が通らないのかを発見して、それからHMACSHA 256に変えて通過したことを発見して、ドキュメントを見てみるとデフォルトMD 5と書いてあるのに、問題はここに現れて、demoコードのデフォルトはHMACSHA 256です!
7、砂箱モードテスト時報の金額が正しくない.この問題は私自身もどこで見たか覚えていない.とにかく微信ドキュメントには見つからなかった.その原因は砂箱モードテストの金額(total_fee)が330固定しなければならないからだ.
また、砂箱モードでの支払いコードでは支払いができません.支払いができません.つまり、支払い結果通知をテストすることができません.正式に1銭で測定するしかありません.
最後に、支払い結果通知spring mvcを受信する受信方式コードをメモします.
サボったほうがいいから、面倒を恐れないアドバイスは実体クラスで注釈をつけて受け取る.
1、小さいプログラムはcode 2 Sessionを取得する時errcodeが間違いを犯す時エラーコードを返すことができて、しかし正常な時意外にもこのフィールドさえ返さないで、約束した正常は0を返しますか?
2、小プログラム支払いのタイムスタンプパラメータは、小プログラム支払いインタフェースを呼び出すときにバックグラウンドで署名を生成する必要があり、timeStampパラメータがあり、ドキュメントには現在の時間と書かれている.ここには秒レベルのピットがあり、javaで直接Systemを使用する場合は、秒レベルにする必要がある.CurrentTimeMillis()はダメ!署名エラーが表示されます.
正しい方法はシステムです.currentTimeMillis()/1000
3、ウィジェットが署名を支払うときkeyはつなぎ合わせるので、ドキュメントには明記されていませんが、例にはどれを基準にしているのか分かりません.
4、すべての署名をMD 5に統一することを提案します.そうしないと、どこが他の署名を黙認しているのか分かりません.
5、ウィジェット決済、つまり取引タイプがJSAPIの場合はopenIdを転送します.またappId appkey sercrt mechIdなどは対応しないと署名に失敗することがありますので注意してください.
6、微信はdemoの中のコードの大きな穴を支払って、その中に1段あります:
public WXPay(){
if(useSandBox){
signType = MD5;
}else{
signType = HMACSHA256
}
}
注意ここでは必ず変更し、統一されたMD 5に変更します.
public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport, final boolean useSandbox) throws Exception {
this.config = config;
this.notifyUrl = notifyUrl;
this.autoReport = autoReport;
this.useSandbox = useSandbox;
if (useSandbox) {
this.signType = SignType.MD5; //
}
else {
//TODO MD5
this.signType = SignType.MD5;
}
this.wxPayRequest = new WXPayRequest(config);
}
そうでなければ、支払い成功結果通知を受け取るときにどうしていつも署名が通らないのかを発見して、それからHMACSHA 256に変えて通過したことを発見して、ドキュメントを見てみるとデフォルトMD 5と書いてあるのに、問題はここに現れて、demoコードのデフォルトはHMACSHA 256です!
7、砂箱モードテスト時報の金額が正しくない.この問題は私自身もどこで見たか覚えていない.とにかく微信ドキュメントには見つからなかった.その原因は砂箱モードテストの金額(total_fee)が330固定しなければならないからだ.
また、砂箱モードでの支払いコードでは支払いができません.支払いができません.つまり、支払い結果通知をテストすることができません.正式に1銭で測定するしかありません.
最後に、支払い結果通知spring mvcを受信する受信方式コードをメモします.
@RequestMapping(value="receiveResult",consumes = {MediaType.TEXT_XML_VALUE},produces = {MediaType.TEXT_XML_VALUE})
public String receiveResult(@NotNull @RequestBody String xml){
//TODO
....
}
サボったほうがいいから、面倒を恐れないアドバイスは実体クラスで注釈をつけて受け取る.