一、概述
微信JSAPI支付是指通过微信公众号或开放平台的网页授权获取用户openid,再通过JSAPI接口完成支付的一种移动支付方式。它主要适用于微信公众号开发、微信小程序开发等场景。
本文将从准备工作、支付流程和注意事项三个方面详细介绍微信JSAPI支付。
二、准备工作
在进行微信JSAPI支付时,需要完成以下准备工作:
1、开通微信支付功能,并完成商户认证;
2、获取微信支付相关API信息,包括appid、mchid、key等;
3、在微信公众平台或开放平台创建应用,并完成绑定,获取appid和appsecret;
4、在应用中完成OAuth2.0网页授权,获取用户openid。
完成以上准备工作后,即可进入微信JSAPI支付流程。
三、支付流程
微信JSAPI支付的流程主要包括以下步骤:
1、获取用户授权
用户需先授权给商户公众号或开放平台,允许查询用户基本信息,包括openid。
// 获取微信OAuth2.0授权 var wxAuth = "https://open.weixin.qq.com/connect/oauth2/authorize?"; var appId = "appid=YOUR_APPID"; var redirectUri = "&redirect_uri=YOUR_REDIRECT_URI"; var responseType = "&response_type=code"; var scope = "&scope=snsapi_base"; var state = "&state=STATE#wechat_redirect"; var url = wxAuth + appId + redirectUri + responseType + scope + state; window.location.href = url;
2、生成预支付订单
商户后台调用微信统一下单接口,生成预支付订单,同时返回预支付交易会话标识prepay_id。
// 获取微信统一下单接口 var wxUnifiedOrder = "https://api.mch.weixin.qq.com/pay/unifiedorder"; // 构造预支付订单参数 var data = { appid: "YOUR_APPID", // 公众号appid mch_id: "YOUR_MCHID", // 商户号 nonce_str: "RANDOM_STRING", // 随机字符串 body: "PRODUCT_NAME", // 商品描述 out_trade_no: "YOUR_ORDER_NUMBER", // 商户订单号 total_fee: "TOTAL_FEE", // 总金额(单位:分) spbill_create_ip: "IP_ADDRESS", // 终端IP notify_url: "YOUR_NOTIFY_URL", // 通知地址 trade_type: "JSAPI", // 交易类型 openid: "USER_OPENID" // 用户openid }; // 对参数进行签名 data.sign = sign(data, "YOUR_KEY"); // 将参数转换为XML格式 var postData = convertToXml(data); // 发送计算预支付订单请求 var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { // 解析支付接口返回的XML数据 var response = parseXml(xhr.responseText); // 获取prepay_id var prepayId = response.prepay_id; } } xhr.open("POST", wxUnifiedOrder, true); xhr.send(postData);
3、生成支付参数
根据微信支付API规范,生成支付参数。
// 构造支付参数 var params = { appId: "YOUR_APPID", nonceStr: "RANDOM_STRING", package: "prepay_id=" + prepayId, signType: "MD5", timeStamp: new Date().getTime()/1000|0 }; // 对参数进行签名 params.paySign = sign(params, "YOUR_KEY");
4、调用微信支付接口
调用微信支付JSAPI接口进行支付。
// 调用微信支付JSAPI WeixinJSBridge.invoke('getBrandWCPayRequest', params, function(res) { if (res.err_msg == "get_brand_wcpay_request:ok") { // 支付成功后的处理逻辑 } else { // 支付失败后的处理逻辑 } });
四、注意事项
在使用微信JSAPI支付时,需要注意以下几点:
1、请确保公众号或开放平台已完成认证,并正确获取相应API信息。
2、预支付订单的费用单位是分,需要注意转化。
3、生成支付参数时,请确保参数的完整性和正确性,并进行签名。
4、调用微信支付接口前需先判断WeixinJSBridge是否存在。
5、在本地测试时需使用HTTPS协议。
总结
本文详细介绍了微信JSAPI支付的流程和注意事项,希望对开发者能有所帮助。如有疑问或错误,欢迎指出。