微信支付——扫码支付Native

佐手、 提交于 2019-12-24 06:54:13

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!