微信支付如何实现内置浏览器的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 相关文章推荐
分享一个自己写的table表格排序js插件(高效简洁)
Oct 29 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
Sep 06 Javascript
JavaScript通过prototype给对象定义属性用法实例
Mar 23 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
Mar 26 Javascript
使用AOP改善javascript代码
May 01 Javascript
直接拿来用的页面跳转进度条JS实现
Jan 06 Javascript
Javascript中的prototype与继承
Feb 06 Javascript
vue项目中v-model父子组件通信的实现详解
Dec 10 Javascript
Vue.js组件实现选项卡以及切换特效
Jul 24 Javascript
vue源码nextTick使用及原理解析
Aug 13 Javascript
微信小程序:报错(in promise) MiniProgramError
Oct 30 Javascript
js基础语法与maven项目配置教程案例
Jul 15 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.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
js获取url中&quot;?&quot;后面的字串方法
2014/05/15 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
python中assert用法实例分析
2015/04/30 Python
详解Python3中的Sequence type的使用
2015/08/01 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
心理学专业毕业生推荐信范文
2013/11/21 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
运动会入场词100字
2014/02/06 职场文书
洗车工岗位职责
2014/03/15 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
律师催款函范文
2015/06/24 职场文书
2016年党建工作简报
2015/11/26 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python