微信技术文档 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
微信平台接口https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6
微信公众号支付报错:get_brand_wcpay_request:fail
function onBridgeReady(appId,timeStamp,nonceStr,package,signType,paySign){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId": appId, //公众号名称,由商户传入
"timeStamp": timeStamp, //时间戳,自1970年以来的秒数
"nonceStr": nonceStr, //随机串
"package": package,
"signType": signType, //微信签名方式:
"paySign": paySign//微信签名
},
function(res){
alert(JSON.stringify(res));
alert(res.err_code + res.err_msg + res.err_desc);
if(res.err_msg == "get_brand_wcpay_request:ok" ) {
pop({
text:"支付成功!",
type:"1",
style:"text-align:center"
},function(){
blacks();
});
sessionStorage.level_id = 2;
}else if(res.err_msg == "get_brand_wcpay_request:cancel" ) {
pop({text:"取消 支付成功"});
}else if(res.err_msg == "get_brand_wcpay_request:fail"){
pop({text:"支付失败"});
}
}
);
}
微信支付开发文档:https://pay.weixin.qq.com/wiki/doc/api/index.html
H5支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1
后端java:
public static JSONObject wxOnePay(){
//第一步:获取下单prepay_id
String prepay_id = null;
Map<Object, Object> parameters = new HashMap<Object, Object>();
parameters.put("appid", "");
parameters.put("mch_id", "");
parameters.put("nonce_str", PayCommonUtil.CreateNoncestr());//随机字符串
parameters.put("body", "会员费"); //付费说明
parameters.put("out_trade_no", "2019022518010127");//下单流水号
parameters.put("total_fee", "100");//支付金额(以分为单位)
parameters.put("notify_url", Constants.NOTIFY_URI);// 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。
parameters.put("trade_type", "JSAPI");
parameters.put("openid", user.open_id); //用户openid
//签名
String sign = PayCommonUtil.createSign("UTF-8", parameters);
parameters.put("sign", sign);
String requestXML = PayCommonUtil.getRequestXml(parameters);
Logger.info("requestXML:" + requestXML.toString());
String result = WeChatUtil.httpRequest2("https://api.mch.weixin.qq.com/pay/unifiedorder", "POST", requestXML.toString());
Logger.info("result:" + result);
Map<String, String> map = XMLUtil.doXMLParse(result);
String returnCode = map.get("return_code");
String resultCode = map.get("result_code");
if(returnCode.equalsIgnoreCase("SUCCESS")&&resultCode.equalsIgnoreCase("SUCCESS")) {
prepay_id = map.get("prepay_id");
}
//第二步
String timeStamp = PayCommonUtil.getTimeStamp();
String nonceStr = PayCommonUtil.CreateNoncestr();
//获取签名
StringBuilder redirectSignStr = new StringBuilder("appId="+Constants.APPID);
redirectSignStr.append("&nonceStr="+nonceStr);
redirectSignStr.append("&package=prepay_id="+prepay_id);
redirectSignStr.append("&signType=MD5");
redirectSignStr.append("&timeStamp="+timeStamp);
redirectSignStr.append("&key="+Constants.WX_API_KEY);
String paySign = MD5Util.MD5Encode(redirectSignStr.toString(), "UTF-8").toUpperCase();
HashMap<String,String> map = new HashMap<String,String>();
map.put("status", "1");
map.put("appId", Constants.APPID);
map.put("timeStamp", timeStamp);
map.put("nonceStr", nonceStr);
map.put("package", "prepay_id="+ prepay_id);
map.put("signType", "MD5");
map.put("paySign", paySign);
JSONObject jsonObject = JSONObject.fromObject(callbackMap);
return jsonObject;
}