微信支付如何实现内置浏览器的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 判断函数类型完美解决方案
Sep 02 Javascript
jQuery 常见学习网站与参考书
Nov 09 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
Sep 10 Javascript
js 窗口抖动示例
Sep 04 Javascript
js实现动态改变字体大小代码
Jan 02 Javascript
javascript html5移动端轻松实现文件上传
Mar 27 Javascript
js下拉菜单生成器dropMenu使用方法详解
Aug 01 Javascript
浅谈React Native 中组件的生命周期
Sep 08 Javascript
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 Javascript
小程序自定义模板实现吸顶功能
Jan 08 Javascript
vue-socket.io接收不到数据问题的解决方法
May 13 Javascript
分享15个Webpack实用的插件!!!
Mar 31 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面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
PHP中is_dir()函数使用指南
2015/05/08 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
javascript 获取图片颜色
2009/04/05 Javascript
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
python直接访问私有属性的简单方法
2016/07/25 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
大学生军训自我评价分享
2013/11/09 职场文书
计算机学生的自我评价分享
2014/02/18 职场文书
品酒会策划方案
2014/05/26 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
通报表扬范文
2015/01/17 职场文书
介绍信格式样本
2015/05/05 职场文书
学生检讨书怎么写
2015/05/07 职场文书
Python学习开发之图形用户界面详解
2021/08/23 Python
python的变量和简单数字类型详解
2021/09/15 Python
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS
Go语言grpc和protobuf
2022/04/13 Golang
python实现学员管理系统(面向对象版)
2022/06/05 Python
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android