JS通过调用微信API实现微信支付功能的方法示例

发布时间 - 2026-01-11 02:06:28    点击率:

本文实例讲述了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){
      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个微信开发的群,最终在高人的指点下终于搞出来了。再次表示感谢。程序员是一个热爱分享的群体,他们非常乐意把自己知道的东西分享出去。所以不懂的时候,多问问。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。


# JS  # 微信API  # 微信支付  # 微信JSSDK调用微信扫一扫功能的方法  # 微信分享调用jssdk实例  # JS 调用微信扫一扫功能  # 微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法  # javascript使用call调用微信API  # nodejs调取微信收货地址的方法  # 随机数  # 文档  # 是一个  # 商户  # 就会  # 就可以  # 和你  # 这两个  # 大神  # 非常重要  # 几个  # 我就  # 来了  # 也会  # 相关内容  # 一句  # 将在  # 说了  # 我一  # 最重要 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何记录自定义日志?(Log频道配置)  如何在IIS中新建站点并配置端口与IP地址?  如何在建站之星网店版论坛获取技术支持?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何快速登录WAP自助建站平台?  js实现点击每个li节点,都弹出其文本值及修改  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  android nfc常用标签读取总结  bootstrap日历插件datetimepicker使用方法  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  零服务器AI建站解决方案:快速部署与云端平台低成本实践  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  怎么用AI帮你设计一套个性化的手机App图标?  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  JS去除重复并统计数量的实现方法  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  如何在服务器上三步完成建站并提升流量?  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  JavaScript如何操作视频_媒体API怎么控制播放  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  如何打造高效商业网站?建站目的决定转化率  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  Laravel Fortify是什么,和Jetstream有什么关系  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  如何快速搭建FTP站点实现文件共享?  Android实现代码画虚线边框背景效果  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  千库网官网入口推荐 千库网设计创意平台入口  太平洋网站制作公司,网络用语太平洋是什么意思?  进行网站优化必须要坚持的四大原则  深入理解Android中的xmlns:tools属性  如何在IIS服务器上快速部署高效网站?  如何用PHP工具快速搭建高效网站?  新三国志曹操传主线渭水交兵攻略  如何在建站主机中优化服务器配置?  如何在Ubuntu系统下快速搭建WordPress个人网站?  如何在云主机上快速搭建网站?  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  图册素材网站设计制作软件,图册的导出方式有几种?  简单实现Android文件上传  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  Laravel如何处理和验证JSON类型的数据库字段  如何快速生成凡客建站的专业级图册?  HTML 中如何正确使用模板变量为元素的 name 属性赋值