微信支付如何实现内置浏览器的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 相关文章推荐
JavaScript数组和循环详解
Apr 27 Javascript
js事件监听器用法实例详解
Jun 01 Javascript
js全选按钮的实现方法
Nov 17 Javascript
jQuery中cookie插件用法实例分析
Dec 04 Javascript
学习JavaScript设计模式之单例模式
Jan 19 Javascript
jQuery层级选择器_动力节点节点Java学院整理
Jul 04 jQuery
vue单页应用加百度统计代码(亲测有效)
Jan 31 Javascript
结合Vue控制字符和字节的显示个数的示例
May 17 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
Sep 30 Javascript
vue 中Virtual Dom被创建的方法
Apr 15 Javascript
Vue快速实现通用表单验证的示例代码
Jan 09 Javascript
JavaScript或jQuery 获取option value值方法解析
May 12 jQuery
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免费发送定时短信的实例
2016/10/24 PHP
JS 时间显示效果代码
2009/08/23 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
基于javascript实现文字无缝滚动效果
2016/03/22 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
Python模块学习 datetime介绍
2012/08/27 Python
Python 文件读写操作实例详解
2014/03/12 Python
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
python中模块的__all__属性详解
2017/10/26 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
pytorch标签转onehot形式实例
2020/01/02 Python
Python socket处理client连接过程解析
2020/03/18 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
自荐信的五个重要部分
2013/10/29 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
代办委托书怎么写
2014/08/01 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
2014年度思想工作总结
2014/11/27 职场文书
2014年科研工作总结
2014/12/03 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
工商行政处罚决定书
2015/06/24 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
Django rest framework如何自定义用户表
2021/06/09 Python
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android