1 开通商户号
2 商户号平台操作
2.1 绑定小程序appId
2.1.1登录商户平台-产品中心-账号关联(AppID绑定),绑定小程序appId
2.1.2登录微信公众平台,点击“微信支付-商户号管理”,查看相关商户号信息,确认授权申请,或在“公众平台安全助手”下发的模板消息中确认授权信息;
2.2 设置API密钥
进入【账户中心】->【账户设置】->【API安全】->【API密钥】中设置,建议把APIV2和APIV3设置成一样的
2.3 开通JSAPI支付
产品中心->JSAPI提交申请
3 拉起微信支付
3.1 调用API步骤
统一下单——>生成签名——>调起小程序支付
3.2 前端代码示例
payment:function(event){
var that = this;
console.log('去支付按钮点击事件')
wx.request({
url: 'http://192.168.8.50:8080/matouwang/wechat/wechatAppletGolf/createUnifiedOrder',
method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
// 当method 为POST 时 设置以下 的header
header: {
'content-type': 'application/x-www-form-urlencoded' },
data: {
amount: teamMoney,
openid: openId
},
success: function (res) {
if (res.data.prepayId != ''){
console.log('微信统一下单接口调用成功 数据包:' + res.data.prepayId);
console.log('微信统一下单接口调用成功 订单号:' + res.data.outTradeNo);
console.log('调用微信支付接口之前先生成签名')
//保存订单号信息
var outTradeNo = res.data.outTradeNo;
wx.request({
url: 'http://192.168.8.50:8080/matouwang/wechat/wechatAppletGolf/generateSignature',
method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
// 当method 为POST 时 设置以下 的header
header: {
'content-type': 'application/x-www-form-urlencoded' },
data: {
prepayId: res.data.prepayId
},
success: function (paryResult) {
if (paryResult.data.sign != '') {
console.log('微信支付接口之前先生成签名成功')
console.log('签名:' + paryResult.data.sign)
console.log('随机串:' + paryResult.data.nonceStr)
console.log('时间戳:' + paryResult.data.timeStamp)
//这个applyId一定要大写 而且签名的参数和调用方法的参数值一定要统一
wx.requestPayment({
'appId': '',
'timeStamp': paryResult.data.timeStamp,
'nonceStr': paryResult.data.nonceStr,
'package': paryResult.data.package,
'signType': 'MD5',
'paySign': paryResult.data.sign,
'success': function (paymentRes) {
console.log(paymentRes)
that.setData({
notPay: true,
paySuccess: false,
teamNotPay: true,
button:true,
outTradeNo: outTradeNo,
payDate:new Date()
})
},
'fail': function (error) {
console.log(error)
}
})
} else {
console.log('微信支付接口之前先生成签名失败')
}
}
})
}
}
});
},
3.3 后端代码示例
3.3.1 统一下单方法
public static Map<String, Object> createUnifiedOrder(DispatchContext dctx, Map<String, Object> params) {
log.info("-----------------------微信统一下单接口调用开始--------------------");
//设置最终返回对象
JSONObject resultJson = new JSONObject();
//接受参数(金额)
String amount = (String) params.get("amount");
//接受参数(openid)
String openid = (String) params.get("openid");
//接口调用总金额单位为分换算一下(测试金额改成1,单位为分则是0.01,根据自己业务场景判断是转换成float类型还是int类型)
//String amountFen = Integer.valueOf((Integer.parseInt(amount)*100)).toString();
//String amountFen = Float.valueOf((Float.parseFloat(amount)*100)).toString();
String amountFen = "1";
//创建hashmap(用户获得签名)
SortedMap<String, String> paraMap = new TreeMap<String, String>();
//设置body变量 (支付成功显示在微信支付 商品详情中)
String body = "啦啦啦测试";
//设置随机字符串
String nonceStr = RandomCharacterUtil.getRandomString(32).replaceAll("-", "");
//设置商户订单号
// String outTradeNo = RandomCharacterUtil.getRandomNumber(16);
String outTradeNo = generateOrderNum("ZH"