微信支付流程及注意要点
来源:互联网 发布:江苏影视频道网络直播 编辑:程序博客网 时间:2024/05/01 21:40
公众号设置: 1. 设置JS接口安全域名和网页授权域名(可设为一致)
2. 设置支付授权目录和测试授权目录以及测试白名单(支付目录域名要在安全域名下,支付目录要精确到具体支付网页所在目录!)
开发流程:
1. 统一下单
这块按照文档走基本没有什么模糊的地方,成功后得到prepay_id
2. 统一下单成功后接下来要生成两个签名(这两个签名和统一下单中生成的签名不一样)
a. 用于前端wx.config中的签名jsapiSign。
需要使用到jsapi_ticket , 要在后端和access_token一样缓存
(获取jsapi_ticket: https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi )
生成签名函数:
/**
* 生成jsapi_ticket签名 前端wx.config中使用
* @param jsapi_ticket
* @param nonce_str
* @param timestamp
* @param url
* @return
* @throws Exception
*/
public static String getJsapiTicketSign(String jsapi_ticket,String nonce_str,String timestamp,String url)throws Exception{
String sg = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "×tamp=" + timestamp + "&url=" + url;
Util.log(sg);
MessageDigest crypt=MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(sg.getBytes("UTF-8"));
Formatter formatter=new Formatter();
for(byte b:crypt.digest()){
formatter.format("%02x", b);
}
String result=formatter.toString();
formatter.close();
return result;
}
这里主要主意url一定要与前端location.href一致,(注意使用request.getRequestUrl() 不一定是对的,存在ajax传输过来的其他url)
b. 前端使用的chooseWXPay中微信支付签名wxPaySign
生成参数有:appId、nonceStr、package、signType(MD5)、timeStamp(秒)和key(可不传、官方提供实例中的统一支付函数会在最后加上)。
可使用步骤1中返回的字段appId、nonceStr 与wx.config一致即可。
这里重点注意:package的值是"prepay_id="+prepay_id 这种形式,不能只传从1中返回的prepay_id.
/**
* 前端使用的chooseWXPay中微信支付签名
* @param map
* @return
*/
public static String getWxPaySign(Map<String,Object> map){
ArrayList<String> list = new ArrayList<String>();
for(Map.Entry<String,Object> entry:map.entrySet()){
if(entry.getValue()!=""){
list.add(entry.getKey() + "=" + entry.getValue() + "&");
}
}
int size = list.size();
String [] arrayToSort = list.toArray(new String[size]);
Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < size; i ++) {
sb.append(arrayToSort[i]);
}
String result = sb.toString();
result += "key=" + WxpayConfigure.getKey();
Util.log("getWxPaySign Before MD5:" + result);
result = MD5.MD5Encode(result).toUpperCase();
Util.log("getWxPaySign Result:" + result);
return result;
}
3. 在这些都完成后将各字段 appId、timeStamp、nonceStr、wxPaySign、jsapiSign、prepay_id传到前台
首先前端要引用
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
在需要的地方调用WxPayStart函数并赋予后端传送的参数即可
function WxPayStart(appId,timeStamp,nonceSTr,prepay_id,paySign,jsapiSign){
wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: appId, // 必填,公众号的唯一标识 timestamp: timeStamp, // 必填,生成签名的时间戳 nonceStr: nonceSTr, // 必填,生成签名的随机串 signature: jsapiSign,// 必填,调用js签名, jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,这里只写支付的 }); wx.chooseWXPay({ timestamp: timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 nonceStr: nonceSTr, // 支付签名随机串,不长于 32 位 package: "prepay_id=" + prepay_id, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***) signType: 'MD5', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' paySign: paySign, // 支付签名 success: function (res) { // 支付成功后的回调函数 alert("success"); } });
- 微信支付流程及注意要点
- 微信支付开发注意要点
- 微信支付开发注意要点
- 微信支付注意要点(补充ING)
- iOS微信支付流程及实现
- 微信支付流程及集成教程
- 微信支付开发流程及注意事项
- 微信APP支付开发步骤及要点
- 微信支付流程
- 微信支付流程
- 微信支付流程
- 微信支付流程
- 微信支付流程
- 微信支付流程
- 微信 支付流程
- 微信支付流程
- 微信支付流程
- Android集成微信支付的出现-1等错误需要注意的要点
- 图的存储表示--邻接矩阵法实现
- 派遣函数
- string、math、random、bigdecimal、date、calender
- 使用LLDB调试程序
- 使用YAML创建一个 Kubernetes Depolyment
- 微信支付流程及注意要点
- linux中简易配置vim编辑器
- ZooKeeper一:认识ZooKeeper
- tty模型学习
- 自己动手写博客的第一天!!
- dateutil模块
- python数据分析师面试题选
- 浅析Android权限机制(一) —— Android的权限机制
- activity 与 service 之间的通信