微信支付如何实现内置浏览器的H5页面支付


Posted in Javascript onSeptember 25, 2015

因为项目需要,要在H5页面中加入微信支付,所以便去尝试,只想说真的很坑,尤其调试起来不方便

这是微信的官方API文档 微信API

微信支付的准备工作

申请公众号,申请开通支付,这个很简单,自行百度
申请好之后 在微信公众平台页面的“微信支付”页面中的“开发配置”Tab上配置“支付授权目录”,“测试授权目录”,“测试白名单”
在微信公众平台页面的“开发者中心”中找到“AppID(应用ID)”和“AppSecret(应用密钥)”
在商户平台中找到微信支付分配的商户号,以及自己配置一个商户支付密钥

具体步骤

首先通过微信支付的api 获得支付用的prepay_id,这里需要用到上面提到的“AppID(应用ID)”,“AppSecret(应用密钥)”,“微信支付分配的商户号”,“商户支付密钥”以及其他的一些参数(具体参照微信开发文档)用MD5加密成签名(第一次签名)获得prepay_id后,用prepay_id和一些其他参数(具体参照微信开发文档)用MD5加密成签名(第二次签名)然后在前端通过微信内置浏览器提供的js API,WeixinJSBridge.invoke来调用微信支付的弹出页面,这里需要用到上面的第二次的签名

具体代码如下

$.get('/xxx',function(data){
 if(data && data !== ""){
  var _data = $.parseJSON(data)[0];
  if(parseInt(_data.userAgent) < 5){
  alert('您的微信版本低于5.0,无法使用微信支付!');
  return false;
  }
  WeixinJSBridge.invoke('getBrandWCPayRequest',{
  'appId': _data.appId,
  'timeStamp': _data.timeStamp,
  'nonceStr': _data.nonceStr,
  'package': 'prepay_id=' + _data.packageOne,
  'signType': _data.signType,
  'paySign': _data.paySign
  },function(res){
   if(res.err_msg === 'get_brand_wcpay_request:ok'){
   alert('支付成功,返回订单列表!');
   }else if(res.err_msg === 'get_brand_wcpay_request:cancel'){
   alert('取消支付!');
   }
  });

 }
});

几个容易失败点需要注意

支付链接和在开发平台配置的链接不匹配

总共需要2次签名,并且所需的参数是不同的,在JS中用到的签名是第二次签名,不要混淆参数传递的不能有错

如果body中有中文需要转义其中还有一些问题没有完全解决,就是位置支付没有一个判断失效的时间,如果在微信支付的弹出层停留时间太久了,可能这个订单在我们网站上已经失效了,可在微信支付中仍然能支付成功,如果有高人知道这个问题怎么解决的,希望能告诉解决办法

Javascript 相关文章推荐
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
Jan 01 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
Apr 08 Javascript
jquery 插件学习(一)
Aug 06 Javascript
javaScript面向对象继承方法经典实现
Aug 20 Javascript
javascript利用apply和arguments复用方法
Nov 25 Javascript
jQuery实现带玻璃流光质感的手风琴特效
Nov 20 Javascript
关于验证码在IE中不刷新的快速解决方法
Sep 23 Javascript
jQuery DOM节点的遍历方法小结
Aug 15 jQuery
vue.js打包之后可能会遇到的坑!
Jun 03 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
Aug 30 Javascript
jQuery利用FormData上传文件实现批量上传
Dec 04 jQuery
ES6 Map结构的应用实例分析
Jun 26 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
Sep 25 #Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
Sep 24 #Javascript
10个很棒的jQuery代码片段
Sep 24 #Javascript
JS模拟实现Select效果代码
Sep 24 #Javascript
JS基于面向对象实现的拖拽库实例
Sep 24 #Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
Sep 24 #Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
Sep 24 #Javascript
You might like
php生成缩略图的类代码
2008/10/02 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
JavaScript 特殊字符
2007/04/05 Javascript
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
vuex 的简单使用
2018/03/22 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
使用Python生成XML的方法实例
2017/03/21 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
python实现交并比IOU教程
2020/04/16 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
大学四年的个人自我评价
2014/01/14 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
老公爱的承诺书
2014/03/31 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
思想政治表现评语
2015/01/04 职场文书
营销计划书
2015/01/17 职场文书
电视新闻稿
2015/07/17 职场文书
安全伴我行主题班会
2015/08/13 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫