微信小程序如何实现调用微信支付接口的详细步骤?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1364个文字,预计阅读时间需要6分钟。
前言:本项目需使用微信小程序进行支付功能开发,完成后告知手续费过高方案不通过(宝宝心里苦,但宝宝不说)。本次开发因站点在巨人肩膀上顺利完成。
微信支付文档传输门:
前言:应项目要求,需要使用微信小程序做支付,写完后告知手续费太高方案不予通过(宝宝心里苦,但宝宝不说)。此次开发在因站在巨人的肩膀上顺利完成。
微信支付文档传送门:pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3
1.开发工具:
Eclipse+Tomcat+微信web开发工具
2.开发环境:
java+maven
3.开发前准备:
3.1 所需材料
小程序的appid,APPsecret,支付商户号(mch_id),商户密钥(key),付款用户的openid。
申请接入微信商户地址:pay.weixin.qq.com/static/applyment_guide/applyment_detail_miniapp.shtml
3.2 开发模式
本次开发采用的开发模式是:普通模式,适用于有自己开发团队或外包开发商的直连商户收款。开发者申请自己的appid和mch_id,两者需具备绑定关系,以此来使用微信支付提供的开放接口,对用户提供服务。
4 开发
wx.request({ url: address + 'wxPay', data: { openId: openId // amount: amount, // openId: openId }, header: { 'content-type': 'application/x-www-form-urlencoded' // 默认值 }, method: "POST", success: function (res) { console.log(res); that.doWxPay(res.data); }, fail: function (err) { wx.showToast({ icon: "none", title: '服务器异常,清稍候再试' }) }, }); doWxPay(param) { //小程序发起微信支付 wx.requestPayment({ timeStamp: param.data.timeStamp,//记住,这边的timeStamp一定要是字符串类型的,不然会报错 nonceStr: param.data.nonceStr, package: param.data.package, signType: 'MD5', paySign: param.data.paySign, success: function (event) { // success console.log(event); wx.showToast({ title: '支付成功', icon: 'success', duration: 2000 }); }, fail: function (error) { // fail console.log("支付失败") console.log(error) }, complete: function () { // complete console.log("pay complete") } }); },
4.2 java后台
4.2.1 PayUtil.java
private static Logger logger = Logger.getLogger(PayUtil.class); public static JSONObject wxPay(String openid,HttpServletRequest request){ JSONObject json = new JSONObject(); try{ //生成的随机字符串 String nonce_str = Util.getRandomStringByLength(32); //商品名称 String body = new String(WXConst.title.getBytes("ISO-8859-1"),"UTF-8"); //获取本机的ip地址 String spbill_create_ip = Util.getIpAddr(request); String orderNo = WXConst.orderNo; String money = "1";//支付金额,单位:分,这边需要转成字符串类型,否则后面的签名会失败 Map<String, String> packageParams = new HashMap<String, String>(); packageParams.put("appid", WXConst.appId); packageParams.put("mch_id", WXConst.mch_id); packageParams.put("nonce_str", nonce_str); packageParams.put("body", body); packageParams.put("out_trade_no", orderNo);//商户订单号 packageParams.put("total_fee", money); packageParams.put("spbill_create_ip", spbill_create_ip); packageParams.put("notify_url", WXConst.notify_url); packageParams.put("trade_type", WXConst.TRADETYPE); packageParams.put("openid", openid); // 除去数组中的空值和签名参数 packageParams = PayUtil.paraFilter(packageParams); String prestr = PayUtil.createLinkString(packageParams); // 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 //MD5运算生成签名,这里是第一次签名,用于调用统一下单接口 String mysign = PayUtil.sign(prestr, WXConst.key, "utf-8").toUpperCase(); logger.info("=======================第一次签名:" + mysign + "====================="); //拼接统一下单接口使用的xml数据,要将上一步生成的签名一起拼接进去 String xml = "<xml version='1.0' encoding='gbk'>" + "<appid>" + WXConst.appId + "</appid>" + "<body><![CDATA[" + body + "]]></body>" + "<mch_id>" + WXConst.mch_id + "</mch_id>" + "<nonce_str>" + nonce_str + "</nonce_str>" + "<notify_url>" + WXConst.notify_url + "</notify_url>" + "<openid>" + openid + "</openid>" + "<out_trade_no>" + orderNo + "</out_trade_no>" + "<spbill_create_ip>" + spbill_create_ip + "</spbill_create_ip>" + "<total_fee>" + money + "</total_fee>" + "<trade_type>" + WXConst.TRADETYPE + "</trade_type>" + "<sign>" + mysign + "</sign>" + "</xml>"; System.out.println("调试模式_统一下单接口 请求XML数据:" + xml); //调用统一下单接口,并接受返回的结果 String result = PayUtil.api.weixin.qq.com/sns/jscode2session"; //签名方式 public static final String SIGNTYPE = "MD5"; //交易类型 public static final String TRADETYPE = "JSAPI"; //微信统一下单接口地址 public static final String pay_url = "api.mch.weixin.qq.com/pay/unifiedorder";
5 可能出现的问题
5.1 商户号
会出现一个什么异常我忘了,重置一下微信商户密钥就好了
5.2 中文参数
String body = new String(WXConst.title.getBytes("ISO-8859-1"),"UTF-8");
这行很重要,如果报参数索引-2异常,很可能是出现了中文,对中文进行如上处理即可通过。
5.3invalid spbill_create_ip
使用微信web开发工具直接测试的,出现了这个问题,调试记得用真机哦。
整个小程序前后端一个人开发,测试成功上线前夕又嫌弃微信支付收取的手续费(0.6%)太高,结算周期(T+7)太长,所以就被无情抛弃了,这个月项目重启(2018-11)和工商银行达成一致,直接转账到对公账户,目前项目进展顺利已上线。改需求请先扫码(小声bb)
以上所述是小编给大家介绍的微信小程序调用微信支付接口详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对自由互联网站的支持!
本文共计1364个文字,预计阅读时间需要6分钟。
前言:本项目需使用微信小程序进行支付功能开发,完成后告知手续费过高方案不通过(宝宝心里苦,但宝宝不说)。本次开发因站点在巨人肩膀上顺利完成。
微信支付文档传输门:
前言:应项目要求,需要使用微信小程序做支付,写完后告知手续费太高方案不予通过(宝宝心里苦,但宝宝不说)。此次开发在因站在巨人的肩膀上顺利完成。
微信支付文档传送门:pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3
1.开发工具:
Eclipse+Tomcat+微信web开发工具
2.开发环境:
java+maven
3.开发前准备:
3.1 所需材料
小程序的appid,APPsecret,支付商户号(mch_id),商户密钥(key),付款用户的openid。
申请接入微信商户地址:pay.weixin.qq.com/static/applyment_guide/applyment_detail_miniapp.shtml
3.2 开发模式
本次开发采用的开发模式是:普通模式,适用于有自己开发团队或外包开发商的直连商户收款。开发者申请自己的appid和mch_id,两者需具备绑定关系,以此来使用微信支付提供的开放接口,对用户提供服务。
4 开发
wx.request({ url: address + 'wxPay', data: { openId: openId // amount: amount, // openId: openId }, header: { 'content-type': 'application/x-www-form-urlencoded' // 默认值 }, method: "POST", success: function (res) { console.log(res); that.doWxPay(res.data); }, fail: function (err) { wx.showToast({ icon: "none", title: '服务器异常,清稍候再试' }) }, }); doWxPay(param) { //小程序发起微信支付 wx.requestPayment({ timeStamp: param.data.timeStamp,//记住,这边的timeStamp一定要是字符串类型的,不然会报错 nonceStr: param.data.nonceStr, package: param.data.package, signType: 'MD5', paySign: param.data.paySign, success: function (event) { // success console.log(event); wx.showToast({ title: '支付成功', icon: 'success', duration: 2000 }); }, fail: function (error) { // fail console.log("支付失败") console.log(error) }, complete: function () { // complete console.log("pay complete") } }); },
4.2 java后台
4.2.1 PayUtil.java
private static Logger logger = Logger.getLogger(PayUtil.class); public static JSONObject wxPay(String openid,HttpServletRequest request){ JSONObject json = new JSONObject(); try{ //生成的随机字符串 String nonce_str = Util.getRandomStringByLength(32); //商品名称 String body = new String(WXConst.title.getBytes("ISO-8859-1"),"UTF-8"); //获取本机的ip地址 String spbill_create_ip = Util.getIpAddr(request); String orderNo = WXConst.orderNo; String money = "1";//支付金额,单位:分,这边需要转成字符串类型,否则后面的签名会失败 Map<String, String> packageParams = new HashMap<String, String>(); packageParams.put("appid", WXConst.appId); packageParams.put("mch_id", WXConst.mch_id); packageParams.put("nonce_str", nonce_str); packageParams.put("body", body); packageParams.put("out_trade_no", orderNo);//商户订单号 packageParams.put("total_fee", money); packageParams.put("spbill_create_ip", spbill_create_ip); packageParams.put("notify_url", WXConst.notify_url); packageParams.put("trade_type", WXConst.TRADETYPE); packageParams.put("openid", openid); // 除去数组中的空值和签名参数 packageParams = PayUtil.paraFilter(packageParams); String prestr = PayUtil.createLinkString(packageParams); // 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 //MD5运算生成签名,这里是第一次签名,用于调用统一下单接口 String mysign = PayUtil.sign(prestr, WXConst.key, "utf-8").toUpperCase(); logger.info("=======================第一次签名:" + mysign + "====================="); //拼接统一下单接口使用的xml数据,要将上一步生成的签名一起拼接进去 String xml = "<xml version='1.0' encoding='gbk'>" + "<appid>" + WXConst.appId + "</appid>" + "<body><![CDATA[" + body + "]]></body>" + "<mch_id>" + WXConst.mch_id + "</mch_id>" + "<nonce_str>" + nonce_str + "</nonce_str>" + "<notify_url>" + WXConst.notify_url + "</notify_url>" + "<openid>" + openid + "</openid>" + "<out_trade_no>" + orderNo + "</out_trade_no>" + "<spbill_create_ip>" + spbill_create_ip + "</spbill_create_ip>" + "<total_fee>" + money + "</total_fee>" + "<trade_type>" + WXConst.TRADETYPE + "</trade_type>" + "<sign>" + mysign + "</sign>" + "</xml>"; System.out.println("调试模式_统一下单接口 请求XML数据:" + xml); //调用统一下单接口,并接受返回的结果 String result = PayUtil.api.weixin.qq.com/sns/jscode2session"; //签名方式 public static final String SIGNTYPE = "MD5"; //交易类型 public static final String TRADETYPE = "JSAPI"; //微信统一下单接口地址 public static final String pay_url = "api.mch.weixin.qq.com/pay/unifiedorder";
5 可能出现的问题
5.1 商户号
会出现一个什么异常我忘了,重置一下微信商户密钥就好了
5.2 中文参数
String body = new String(WXConst.title.getBytes("ISO-8859-1"),"UTF-8");
这行很重要,如果报参数索引-2异常,很可能是出现了中文,对中文进行如上处理即可通过。
5.3invalid spbill_create_ip
使用微信web开发工具直接测试的,出现了这个问题,调试记得用真机哦。
整个小程序前后端一个人开发,测试成功上线前夕又嫌弃微信支付收取的手续费(0.6%)太高,结算周期(T+7)太长,所以就被无情抛弃了,这个月项目重启(2018-11)和工商银行达成一致,直接转账到对公账户,目前项目进展顺利已上线。改需求请先扫码(小声bb)
以上所述是小编给大家介绍的微信小程序调用微信支付接口详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对自由互联网站的支持!

