微信支付如何实现内置浏览器的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 相关文章推荐
js setTimeout opener的用法示例详解
Oct 23 Javascript
jquery 合并内容相同的单元格(示例代码)
Dec 13 Javascript
Jquery实现自定义窗口随意的拖拽
Mar 12 Javascript
原生js与jQuery实现简单的tab切换特效对比
Jul 30 Javascript
JavaScript基本语法学习教程
Jan 14 Javascript
详解Jquery实现ready和bind事件
Apr 14 Javascript
全面了解js中的script标签
Jul 04 Javascript
jquery 校验中国身份证号码实例详解
Apr 11 jQuery
vue-cli axios请求方式及跨域处理问题
Mar 28 Javascript
原生JS实现简单的倒计时功能示例
Aug 30 Javascript
浅析vue-router原理
Oct 19 Javascript
浅谈JSON5解决了JSON的两大痛点
Dec 14 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入门速成(2)
2006/10/09 PHP
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
Javascript 读后台cookie代码
2008/09/15 Javascript
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
javascript实现简易计算器
2017/02/01 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
python协程用法实例分析
2015/06/04 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
python实现按长宽比缩放图片
2018/06/07 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
Python序列类型的打包和解包实例
2019/12/21 Python
python with语句的原理与用法详解
2020/03/30 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
北京大学自荐信范文
2014/01/28 职场文书
部门2015年度工作总结
2015/04/29 职场文书
爱护公物主题班会
2015/08/17 职场文书
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js
Java对文件的读写操作方法
2022/04/29 Java/Android
zabbix配置nginx监控的实现
2022/05/25 Servers