微信支付如何实现内置浏览器的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 innerHTML 改变div内容的方法
Aug 03 Javascript
JavaScript实现简单图片滚动附源码下载
Jun 17 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
Dec 04 Javascript
AngularJS通过$http和服务器通信详解
Sep 21 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
Dec 28 Javascript
tween.js缓动补间动画算法示例
Feb 13 Javascript
官方推荐react-navigation的具体使用详解
May 08 Javascript
微信小程序使用wxParse解析html的方法教程
Jul 06 Javascript
JavaScript常见鼠标事件与用法分析
Jan 03 Javascript
小程序click-scroll组件设计
Jun 18 Javascript
基于vue--key值的特殊用处详解
Jul 31 Javascript
JS实现简易贪吃蛇游戏
Aug 24 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 Session 变量的使用方法详解与实例代码
2013/09/11 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
phpStudy vscode 搭建debug调试的教程详解
2020/07/28 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
2007/08/15 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
使用js实现数据格式化
2014/12/03 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
基于dataset的使用和图片延时加载的实现方法
2017/12/11 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
haskell实现多线程服务器实例代码
2013/11/26 Python
Python实现遍历数据库并获取key的值
2015/05/17 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
用python绘制樱花树
2020/10/09 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
介绍一下Mysql的存储引擎
2015/02/12 面试题
J2EE中的容器都包括哪些
2013/08/21 面试题
工业自动化专业毕业生推荐信
2013/11/18 职场文书
大学生家政服务项目创业计划书
2014/01/30 职场文书
联谊会主持词
2014/03/26 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
人民的好儿女观后感
2015/06/18 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
Python使用pyecharts控件绘制图表
2022/06/05 Python
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS