1.开通产品。(要实体店拍照)
2.Native支付有两种模式,先介绍第二中模式。公众号appid,小程序appid均可用,付款后展示的通知消息模板不同,移动应用appid不可。
两种模式主要区别:
模式一:依赖微信商户平台配置的扫码回调连接;
模式二:不依赖配置的扫码回调连接,但是生成的支付二维码有效期2小时,开发简单,两者业务流程有区别,模式二的二维码只能扫码付款一次;
3.使用模式二开发。
统一下单——获取到code_url——拼接连接生成二维码
请求成功返回示例:
{
"nonce_str": "8UvmcoZt8OsY5q9m",
"device_info": "S-001",
"code_url": "weixin://wxpay/bizpayurl?pr=31qxQZu",
"appid": "wxdfc5c46e8cee32ca",
"sign": "F89ECB58489849D2D6856273383BA1ED",
"trade_type": "NATIVE",
"return_msg": "OK",
"result_code": "SUCCESS",
"mch_id": "154571",
"return_code": "SUCCESS",
"prepay_id": "wx191750353877131886b964d71860975500"
}
/**
* 模式二,生成2h的二维码<br>
* 只传递了必须参数
* 2019年12月18日 下午1:34:21
* @param openid
* @param appType 1小程序 2APP 0公众号
*/
public static Map<String, String> getQRCodeURL(String outTradeNo,int total_fee,int appType) {
Map<String, String> resutlMap = null;
try {
MyWXPayConfig wxPayConfig = new MyWXPayConfig();
wxPayConfig.setAppType(appType);
WXPay wxpay = new WXPay(wxPayConfig);
Map<String, String> reqData = new HashMap<String, String>();//只传递了必传字段,其他字段看文档
//mch_appid mchid nonce_str sign会自动装配
reqData.put("body", "账户充值");
reqData.put("detail", "账户充值——平台充值");
reqData.put("attach", "附带:账户充值");
reqData.put("out_trade_no", outTradeNo);
reqData.put("device_info", "SD-WZSY-001");// 非必传,设备号
reqData.put("fee_type", "CNY");
reqData.put("total_fee", String.valueOf(total_fee));
reqData.put("spbill_create_ip", "127.0.0.1");// 必传
reqData.put("notify_url", NATIVE_PAY_NOTIFY_NRL);
reqData.put("trade_type", "NATIVE");
reqData.put("product_id", outTradeNo);
// reqData.put("receipt", "Y");// 电子发票开放入口标识,非必填,需先在平台开通功能才可生效
resutlMap = wxpay.unifiedOrder(reqData);
String returnCode = resutlMap.get("return_code");
String resultCode = resutlMap.get("result_code");
if (WXPayConstants.SUCCESS.equals(returnCode) && WXPayConstants.SUCCESS.equals(resultCode)) {
}else {
}
return resutlMap;
} catch (Exception e) {
LogUtil.exception(e);
}
return null;
}
查询:(测试公众号和小程序可互查,估计是相互绑定,订单唯一原因)
/**
* 查询订单
* 2019年12月18日 上午10:40:04
* @param outTradeNo 商户系统订单号
* @param appType 1小程序 2APP 0公众号
*/
public static Map<String, String> getOrderInfo(String outTradeNo,int appType) {
Map<String, String> resutlMap = null;
try {
MyWXPayConfig wxPayConfig = new MyWXPayConfig();
wxPayConfig.setAppType(appType);
WXPay wxpay = new WXPay(wxPayConfig);
Map<String, String> reqData = new HashMap<String, String>();//只传递了必传字段,其他字段看文档
reqData.put("out_trade_no", outTradeNo);//商户订单号,是
resutlMap = wxpay.orderQuery(reqData);
LogUtil.log("查询企业付款到零钱结果:" + JSON.toJSONString(resutlMap));
String returnCode = resutlMap.get("return_code");
String resultCode = resutlMap.get("result_code");
if (WXPayConstants.SUCCESS.equals(returnCode) && WXPayConstants.SUCCESS.equals(resultCode)) {
}else {
}
return resutlMap;
} catch (Exception e) {
LogUtil.exception(e);
}
return null;
}
使用商户订单查询返回结果:
{
"nonce_str": "6YYDqZ8SqaGzv3MK",
"device_info": "SD-WZSY-001",
"out_trade_no": "201912192740039573727600640",
"trade_state": "NOTPAY",
"appid": "wx81711a50b5ad592b",
"total_fee": "1",
"sign": "DE24B4202FA15510278B167A91484118",
"trade_state_desc": "订单未支付",
"return_msg": "OK",
"result_code": "SUCCESS",
"mch_id": "1545047571",
"return_code": "SUCCESS"
}
额外:
官方接口文档地址: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1
来源:CSDN
作者:JaneYork
链接:https://blog.csdn.net/qq_31708763/article/details/103616824