微信H 5ページJSPAPI支払い
4229 ワード
公式ドキュメントアドレスJSPAPIhttps://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6
公式文書アドレス統一注文https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
バックグラウンド取得prepay_idパラメータアドレスhttps://api.mch.weixin.qq.com/pay/unifiedorder
要求パラメータ
xml接合パラメータはpackageParamsと一致する
戻りパラメータがxml形式のデータ
返された該当フィールドgetをJSフロントエンドに返信
JSエンド例(公式)
支払署名検証不合格1:フロントエンドに返されるnoncesStrフィールドが単一インタフェースから返されるものと一致しているかどうかをチェック2:paySignが二次署名されているかどうかをチェックし、フロントエンドに返信されているかどうかをチェック3:appidがフロントエンドと一致しているかどうかをチェック4:signTypeが一致しているかどうかをチェック5:noncesStr生成規則をチェックし、注意記号(例:-)
注文失敗、タイムアウト1:timeStampが10ビットintかどうかをチェック2:prepay_をチェックidが有効期間内であるか
この取引先は注文書を予約する権限がなくて、取引先の公衆番号のバックグラウンドが関連JSPIを配置するかどうかを検査します
HttpUrlリンクは正当な範囲内で外部ネットワークアクセスを構成しない
公式文書アドレス統一注文https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
バックグラウンド取得prepay_idパラメータアドレスhttps://api.mch.weixin.qq.com/pay/unifiedorder
要求パラメータ
String nonce_str= UUID.randomUUID().toString().replace("-", "");//
SortedMap packageParams = new TreeMap();
packageParams.put("appid", APPID);
packageParams.put("attach", attach);//
packageParams.put("body", describe);//
packageParams.put("mch_id", MCHID);//
packageParams.put("nonce_str", nonce_str);//
packageParams.put("notify_url", NOTIFY_URL);//
packageParams.put("out_trade_no", out_trade_no);//
packageParams.put("spbill_create_ip", spbill_create_ip);// IP
packageParams.put("total_fee", money);// int
packageParams.put("trade_type", "JSAPI"); // JSAPI
packageParams.put("openid", openid); //JSAPI openid
String sign = WxPayUtils.createSign(packageParams,KEY);// KEY, MD5 ( , JS )
xml接合パラメータはpackageParamsと一致する
String xml=""+
""+APPID+" "+
""+attach+" "+
""+
""+MCHID+" "+
""+nonce_str+" "+
""+sign+" "+
""+NOTIFY_URL+" "+
""+out_trade_no+" "+
""+spbill_create_ip+" "+
""+money+" "+
"JSAPI "+
""+openid+" "+
" ";
戻りパラメータがxml形式のデータ
返された該当フィールドgetをJSフロントエンドに返信
String appid = (String) map.get("appid");
String prepay_id = (String) map.get("prepay_id");
String nonce_str = (String) map.get("nonce_str");
SortedMap mapParam = new TreeMap();
mapParam.put("appId", appid);
mapParam.put("timeStamp", String.valueOf(cUtil.getTime()));
mapParam.put("nonceStr", nonce_str.trim());
mapParam.put("package", "prepay_id="+prepay_id.trim());
mapParam.put("signType", "MD5");
// , ( paySign)MD5
mapParam.put("paySign", WxPayUtils.createSign(mapParam,WxJSPay.KEY));
JSエンド例(公式)
function onBridgeReady(){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId":"wx2421b1c4370ec43b", // ,
"timeStamp":"1395712654", // , 1970
"nonceStr":"e61463f8efa94090b1f366cccfbbb444", //
"package":"prepay_id=u802345jgfjsdfgsdg888",
"signType":"MD5", // :
"paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //
},
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ){
// , :
//res.err_msg ok, 。
}
});
}
支払署名検証不合格1:フロントエンドに返されるnoncesStrフィールドが単一インタフェースから返されるものと一致しているかどうかをチェック2:paySignが二次署名されているかどうかをチェックし、フロントエンドに返信されているかどうかをチェック3:appidがフロントエンドと一致しているかどうかをチェック4:signTypeが一致しているかどうかをチェック5:noncesStr生成規則をチェックし、注意記号(例:-)
注文失敗、タイムアウト1:timeStampが10ビットintかどうかをチェック2:prepay_をチェックidが有効期間内であるか
この取引先は注文書を予約する権限がなくて、取引先の公衆番号のバックグラウンドが関連JSPIを配置するかどうかを検査します
HttpUrlリンクは正当な範囲内で外部ネットワークアクセスを構成しない