JS调用微信API实现微信支付
最近在做微信公众号开发,在微信支付上遇到一些问题,困惑了3天,今天终于搞定。期间要感谢一些大神的帮助,趁热下面分享一下我的经验。
在实现微信支付之前,需要到微信开发平台认证,这些认证和配置信息我就不多说了,这里主要从代码层面实现支付。
function onBridgeReady(){WeixinJSBridge.invoke('getBrandWCPayRequest', {"appId" : "wx2421b1c4370ec43b", //公众号名称,由商户传入 "timeStamp":" 1395712654", //时间戳,自1970年以来的秒数 "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //随机串 "package" : "prepay_id=u802345jgfjsdfgsdg888", //统一订单号"signType" : "MD5", //微信签名方式: "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //支付签名},function(res){ <br> alert(res.err_msg);if(res.err_msg == "get_brand_wcpay_request:ok" ) {} // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。});
}
if (typeof WeixinJSBridge == "undefined"){if( document.addEventListener ){document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);}else if (document.attachEvent){document.attachEvent('WeixinJSBridgeReady', onBridgeReady);document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);}
}else{onBridgeReady();
}
上面的JS代码是官方文档上贴出来的,官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7。
下面对JS中的几个参数做主要的讲解:
在开发过程中,有4个非常重要的参数:一个是appid,AppSecret,apikey和商户号。上面js中的appID就是其中之一。timeStamp是一个时间戳,10位数,nonceStr是随机数,32位以内,这里最重要的两个参数,也是最容易出错的就是package和paySign了。我一一说来。先说package,这里需要用到prepay_id,这个参数是微信生成的订单号,需要我们调用统一订单接口来获取。官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1。可以从文档看到,要获取prepay_id,需要很多参数,这里面有一个非常重要的参数就是签名。注意:这里的签名和JS中的支付签名和不同的。 签名的算法文档里有,我只是强调两点。一个是参数的顺序,一定一定要按照ASCII从小到大拼接,二是apikey一定不能错,这个apikey在哪里呢?登入商户平台就可以设置了。
拼接好签名需要的字符串后,进行MD5加密就可以得到签名了。然后把签名和前面所有的参数组合成xml格式的字符串,调用给的接口URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。
下面再说JS中的最后一个参数PaySign:支付签名。支付签名的算法也是一样,把JS中的其他5个参数按照顺序拼接,加上apikey,MD5加密,ok。
签名的算法都是一样的,只是参数值不同而已。这里需要注意一点。在支付签名的时候,用到随机数nonceStr,时间戳timeStamp,而签名时使用的这两个参数和JS中的这两个参数的值要是一样的,是同一个随机数,同一个时间戳。为什么呢?虽然文档没说,但是我的理解是:支付签名是通过随机数和时间戳来生成的,然后在支付的时候,把随机数,时间戳,支付签名一起发送过去,那么在微信进行验证的时候,也会根基js中的随机数和时间戳生成签名和你发送的支付签名进行比较,如果你在js中重新获取新的随机数、时间戳,那么算出来的签名和你发送的签名就会不一样,就会报错:签名失败。
到此,代码层面的注意点就这些,当然,还有其他的一些注意点。比如其中有用的openid,这个参数也是需要调用接口获取到的,还有支付授权的目录是否配置正确。
最后一句总结:仔细看文档,最后问别人,可以找微信支付相关的群,里面很多大神的,我之前就是遇到一个问题纠结了2天没解决,(有时候光看文档也不行),
然后怒加了8个微信开发的群,最终在高人的指点下终于搞出来了。再次表示感谢。程序员是一个热爱分享的群体,他们非常乐意把自己知道的东西分享出去。所以不懂的时候,多问问。
JS调用微信API实现微信支付相关推荐
- uni-app中使用native.js调用android API实现双卡发送短信
uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS.Android.H5.以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等多个平台官网地址 因 ...
- JS调用百度api接口——实现简单的百度页面
描述: JS调用百度api接口--实现简单的百度页面 效果: 实现: css文件: @charset "utf-8"; /* CSS Document */ *{margin: 0 ...
- 前端js调用后端API获取数据的三种方法(2022.7.25)
前端js调用后台API获取数据的三种方法(2022.7.25) 前言 需求分析 一个Get实例 浏览器请求 SoapUI软件请求 一个Post实例 浏览器请求 SoapUI软件请求 1.Http简介( ...
- v3 微信api 请求微信_企业微信API使用基本教程
在企业微信创建自建应用 1.登录企业微信后台,在"应用管理>自建"中点击"创建应用",填写应用信息创建. API配置表参数值获取 1.corpid:企业I ...
- 使用微信API给微信用户发文本消息
这个系列的第二篇教程,介绍的实际是被动方式给微信用户发文本消息,即微信用户关注您的公众号时,微信平台将这个关注事件通过一个HTTP post发送到您的微信消息服务器上.您对这个post请求做了应答(格 ...
- python微信接口发送消息_调用微信API发送微信消息python脚本
前阵子部署zabbix监控系统,做了个微信报警,下面分享下微信调API发消息的脚本.要用微信发消息,自己首先要有微信企业号,如果没有申请也容易 准备工作: 1.申请微信企业号 2.在企业号后台创建应用 ...
- v3 微信api 请求微信_V3版JSAPI微信开发
前台代码: ResponseEncoding="GBK" Debug="true" %> 公众号JSAPI支付测试网页 // 当微信内置浏览器完成内部初始 ...
- js调用高德API获取所在当前城市
可以在js代码中直接调用API接口,获取所处当前城市信息,代码如下: <script type="text/javascript">function getCurren ...
- js调用天地图api
在网上随便找了一个例子: $submit.on('click',function(){var key=$(".key").val();var poiajaxurl='http:// ...
最新文章
- IJCAI 2021 医药AI必读论文推荐
- python中的list和array的区别及相互转化
- Spring Boot定时任务-Quartz介绍
- 高压电是以交流,还是直流方式输送?
- vba excel 退出编辑状态_VBA小常识(15)—Application对象
- Protocol handler start failedCaused by: java.net.SocketException: Permission denied
- linux 下的挂载
- bzoj 1654: [Usaco2006 Jan]The Cow Prom 奶牛舞会(Trajan)
- QSerialPort线程内接收异常
- mysql查询报错2014_MySQL错误2014的原因其他未缓冲的查询处于活动状态时无法执行查询...
- tomcat日志配置调整
- 1、曾经风光无限的jsp,为什么现在很少有人使用了?
- OA系统新流程创建与管理办法
- 微信隐藏代码功能合集
- 1、JavaScript入门
- dd命令详细(好文收藏)
- 一棵度为2的树和一棵二叉树有什么区别
- 初创企业购买企业邮箱_应用创意可为2019年及以后的初创企业带来收入
- 解决程控电话交换机内线有杂音问题
- 读书笔记 - -《Python网络编程》重点