微信支付如何实现内置浏览器的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 三种创建对象的方法
Oct 16 Javascript
用jquery实现等比例缩放图片效果插件
Jul 24 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
Jan 29 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
Jun 06 Javascript
JavaScript中property和attribute的区别详细介绍
Mar 03 Javascript
js简单实现图片延迟加载的方法
Jul 19 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
Jul 28 Javascript
js 将图片连接转换成base64格式的简单实例
Aug 10 Javascript
angularjs实现文字上下无缝滚动特效代码
Sep 04 Javascript
浅谈javascript:两种注释,声明变量,定义函数
Sep 29 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
Jan 03 Javascript
koa-router源码学习小结
Sep 07 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
[原创]效率较高的php下读取文本文件的代码
2008/07/02 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
php压缩和解压缩字符串的方法
2015/03/14 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
WordPress JQuery处理沙发头像
2009/06/22 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
浅谈Javascript面向对象编程
2011/11/15 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
jQuery插件版本冲突的处理方法分析
2017/01/16 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
Node 代理访问的实现
2019/09/19 Javascript
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
Python简单定义与使用二叉树示例
2018/05/11 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
python判断元素是否存在的实例方法
2020/09/24 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
介绍一下JMS编程步骤
2015/09/22 面试题
大学生工作自荐书
2014/06/16 职场文书
团组织推优材料
2014/12/29 职场文书
爱的承诺书
2015/01/20 职场文书
科技活动总结范文
2015/05/11 职场文书