最近在做微信公众号开发,在微信支付上遇到一些问题,困惑了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实现微信支付相关推荐

  1. uni-app中使用native.js调用android API实现双卡发送短信

    uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS.Android.H5.以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等多个平台官网地址 因 ...

  2. JS调用百度api接口——实现简单的百度页面

    描述: JS调用百度api接口--实现简单的百度页面 效果: 实现: css文件: @charset "utf-8"; /* CSS Document */ *{margin: 0 ...

  3. 前端js调用后端API获取数据的三种方法(2022.7.25)

    前端js调用后台API获取数据的三种方法(2022.7.25) 前言 需求分析 一个Get实例 浏览器请求 SoapUI软件请求 一个Post实例 浏览器请求 SoapUI软件请求 1.Http简介( ...

  4. v3 微信api 请求微信_企业微信API使用基本教程

    在企业微信创建自建应用 1.登录企业微信后台,在"应用管理>自建"中点击"创建应用",填写应用信息创建. API配置表参数值获取 1.corpid:企业I ...

  5. 使用微信API给微信用户发文本消息

    这个系列的第二篇教程,介绍的实际是被动方式给微信用户发文本消息,即微信用户关注您的公众号时,微信平台将这个关注事件通过一个HTTP post发送到您的微信消息服务器上.您对这个post请求做了应答(格 ...

  6. python微信接口发送消息_调用微信API发送微信消息python脚本

    前阵子部署zabbix监控系统,做了个微信报警,下面分享下微信调API发消息的脚本.要用微信发消息,自己首先要有微信企业号,如果没有申请也容易 准备工作: 1.申请微信企业号 2.在企业号后台创建应用 ...

  7. v3 微信api 请求微信_V3版JSAPI微信开发

    前台代码: ResponseEncoding="GBK" Debug="true" %> 公众号JSAPI支付测试网页 // 当微信内置浏览器完成内部初始 ...

  8. js调用高德API获取所在当前城市

    可以在js代码中直接调用API接口,获取所处当前城市信息,代码如下: <script type="text/javascript">function getCurren ...

  9. js调用天地图api

    在网上随便找了一个例子: $submit.on('click',function(){var key=$(".key").val();var poiajaxurl='http:// ...

最新文章

  1. IJCAI 2021 医药AI必读论文推荐
  2. python中的list和array的区别及相互转化
  3. Spring Boot定时任务-Quartz介绍
  4. 高压电是以交流,还是直流方式输送?
  5. vba excel 退出编辑状态_VBA小常识(15)—Application对象
  6. Protocol handler start failedCaused by: java.net.SocketException: Permission denied
  7. linux 下的挂载
  8. bzoj 1654: [Usaco2006 Jan]The Cow Prom 奶牛舞会(Trajan)
  9. QSerialPort线程内接收异常
  10. mysql查询报错2014_MySQL错误2014的原因其他未缓冲的查询处于活动状态时无法执行查询...
  11. tomcat日志配置调整
  12. 1、曾经风光无限的jsp,为什么现在很少有人使用了?
  13. OA系统新流程创建与管理办法
  14. 微信隐藏代码功能合集
  15. 1、JavaScript入门
  16. dd命令详细(好文收藏)
  17. 一棵度为2的树和一棵二叉树有什么区别
  18. 初创企业购买企业邮箱_应用创意可为2019年及以后的初创企业带来收入
  19. 解决程控电话交换机内线有杂音问题
  20. 读书笔记 - -《Python网络编程》重点

热门文章

  1. 堆栈式 CMOS、背照式 CMOS 和传统 CMOS 传感器的区别
  2. 计算机专业英文简历和求职信,计算机专业应届生英文简历模板
  3. 有道搜索linux,有道阅读新增搜索功能
  4. 如何查找三星硬盘白皮书?
  5. spring boot 是如何利用jackson进行序列化的?
  6. .ISO文件转换为.QCW2文件 阿里云上传自定义镜像
  7. 计算机软件著作评职称有用吗,软件著作权评职称有用吗
  8. 人和人的相遇,是必然还是偶然
  9. linux 怎样清理内存,linux清理内存命令(示例代码)
  10. Gesture建立手写笔画图案