微信支付如何实现内置浏览器的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 Event学习第八章 事件的顺序
Feb 07 Javascript
IE6下通过a标签点击切换图片的问题
Nov 14 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
Mar 18 Javascript
JavaScript 七大技巧(二)
Dec 13 Javascript
详解vue-cli 脚手架项目-package.json
Jul 04 Javascript
图片懒加载imgLazyLoading.js使用详解
Sep 15 Javascript
详解如何构建Promise队列实现异步函数顺序执行
Oct 23 Javascript
微信小程序常用简易小函数总结
Feb 01 Javascript
详解微信小程序开发之formId使用(模板消息)
Aug 27 Javascript
js实现简单贪吃蛇游戏
May 15 Javascript
javascript实现京东登录显示隐藏密码
Aug 02 Javascript
解决vue项目axios每次请求session不一致的问题
Oct 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
将CMYK颜色值和RGB颜色相互转换的PHP代码
2014/07/28 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
使用webpack和rollup打包组件库的方法
2021/02/25 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
python如何查看微信消息撤回
2018/11/27 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
Python暴力破解Mysql数据的示例
2020/11/09 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
.net C#面试题
2012/08/28 面试题
2014年班组建设工作总结
2014/12/01 职场文书
校园广播站开场白
2015/06/01 职场文书
CSS3实现的文字弹出特效
2021/04/16 HTML / CSS
javascript的setTimeout()使用方法总结
2021/11/20 Javascript
基于Python实现nc批量转tif格式
2022/08/14 Python
mysql序号rownum行号实现方式
2022/12/24 MySQL