字节跳动接入微信h5支付 有前后端代码 可以咨询帮助
看别的博主也写了这个 地址
1.准备工作
1.需要条件 微信的appid 商户号 key(做为微信生成签名的参数) 微信的回调地址(你公司域名下的接口)
2.字节跳动申请的appid,商户号,key (做为生产orderinfo签名的参数)
3.微信申请的h5支付域名必须为snssdk.com (字节跳动的网址)
4.微信支付的ip必须要动态获取,不然会出现商家参数有误的问题
5.字节跳动接口中回调url必须为https://tp-pay.snssdk.com/paycallback
6.注意微信支付拿到的mweb_url后不要拼接跳转路径
2.流程
1.首先是跑通微信的h5支付
2.在字节跳动那个接口调用h5支付,把返回的mweb_url做为参数做成签名返回给前端
3.前端需要在生成订单号的时候拿到订单号,做为查询订单状态接口的参数去查询支付结果
3.代码实现
1.微信h5支付
1.微信h5
public Map<String,String> orders_other(HttpServletRequest request,String body,BigDecimal total,Integer uid,String orderNo) {
try {
Map<String, String> paraMap = new HashMap<String, String>();
String ip = IpUtils.getIpAddr(request);
paraMap.put("appid", "微信的appid");
paraMap.put("mch_id", "微信的商户号");
paraMap.put("nonce_str", WXPayUtil.generateNonceStr());
paraMap.put("body", body);
paraMap.put("out_trade_no", orderNo);
String total_fee=total.toString();
paraMap.put("total_fee", total_fee);
paraMap.put("spbill_create_ip", ip);
paraMap.put("notify_url", "微信的回调地址");
paraMap.put("trade_type", "MWEB");
paraMap.put("attach", uid.toString());
paraMap.put("scene_info", "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \"支付路径\",\"wap_name\": \"app名\"}}");
String sign = WXPayUtil.generateSignature(paraMap, "微信的key");
paraMap.put("sign", sign);
String xml = WXPayUtil.mapToXml(paraMap);
System.err.println(xml+"我是发送之前");
String unifiedorder_url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
String xmlStr = HttpUtilsYpl.doPost(unifiedorder_url,xml,4000);
System.err.println(xmlStr+"=============");
String mweb_url = "";
if (xmlStr.indexOf("SUCCESS") != -1) {
Map<String, String> map = WXPayUtil.xmlToMap(xmlStr);
mweb_url = (String) map.get("mweb_url");
}
Map<String, String> payMap = new HashMap<String, String>();
payMap.put("mweb_url", mweb_url);
return payMap;
} catch (Exception e) {
log.info("微信支付异常");
}
return null;
}
2.字节跳动orderinfo代码
@GetMapping("/pay")
public Object microCheckoutCounter(HttpServletRequest request, Integer uid, BigDecimal total,String subject,String body,String orderNo) {
Map<String, Object> parameters = new HashMap<>();
parameters.put("merchant_id", "字节跳动商户号");
parameters.put("app_id", "字节跳动appid");
parameters.put("sign_type", "MD5");
parameters.put("timestamp", Long.toString(System.currentTimeMillis() / 1000));
parameters.put("product_code", "pay");
parameters.put("trade_type", "H5");
parameters.put("payment_type", "direct");
parameters.put("version", "2.0");
parameters.put("out_order_no", Long.toString(System.currentTimeMillis()));
parameters.put("uid", uid);
parameters.put("total_amount",total);
parameters.put("currency", "CNY");
parameters.put("subject",subject);
parameters.put("body", body);
parameters.put("trade_time", Long.toString(System.currentTimeMillis() / 1000));
parameters.put("valid_time", "3600");
parameters.put("notify_url", "https://tp-pay.snssdk.com/paycallback");
Map map = orders_other(request,body,total,uid,orderNo);
String wx_url = (String)map.get("mweb_url");
parameters.put("wx_url", wx_url);
parameters.put("wx_type", "MWEB");
String sign = PayCommonUtil.toutiaoAlipaySign(parameters, "字节跳动的key");
parameters.put("sign", sign);
parameters.put("risk_info", "{\"ip\":\"127.0.0.1\", \"device_id\":\"485737374363263\"}");
System.out.println("parameters==="+parameters);
return JsonResult.success(parameters);
}