博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端在h5页面调起微信支付接口和支付宝接口(日常笔记)
阅读量:6801 次
发布时间:2019-06-26

本文共 3856 字,大约阅读时间需要 12 分钟。

微信支付

结合微信支付的api文档进行配置。参考

微信文档中的例子如下。

function onBridgeReady(){   WeixinJSBridge.invoke(      'getBrandWCPayRequest', {         "appId":"wx2421b1c4370ec43b",     //公众号名称,由商户传入              "timeStamp":"1395712654",         //时间戳,自1970年以来的秒数              "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串              "package":"prepay_id=u802345jgfjsdfgsdg888",              "signType":"MD5",         //微信签名方式:              "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名       },      function(res){      if(res.err_msg == "get_brand_wcpay_request:ok" ){      // 使用以上方式判断前端返回,微信团队郑重提示:            //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。      }    }); }// 下面是兼容不同浏览器绑定事件的方法if (typeof WeixinJSBridge == "undefined"){   if( document.addEventListener ){       document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);   }else if (document.attachEvent){       document.attachEvent('WeixinJSBridgeReady', onBridgeReady);        document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);   }}else{   onBridgeReady();}

我们主要是从后台中获取数据传入onBridgeReady这个方法中。

所以第一步是获取数据,第二步是把获取到的数据传入到onBridgeReady方法
第一步:发送请求获取后台数据
1.在对应的api文件下封装请求(get)

export function wechatPay(type, vid, token, point, discount) {  let discount_type = discount || null  return axios.get(`${Host}/api/save_mobile`,{    params: {      pay_type: type,      video_id: vid,      token,      point,      discount_type    }  })}

2.在对应的组件调用请求

发送支付请求

import { wechatPay } from '../../../api/pay.js'export default {  name: 'payfooter',  computed: {    info() {      return this.$store.state.user.info    },    // 获取选择支付的方式    paytype() {      return this.$store.state.pay.paytype    }  },  methods: {    _wechatPay(type, vid, token, point) {       wechatPay(type, vid, token, point).then(res => {            console.log(res) // 这个res就是后台返回的数据       })    }  }}

3.后台返回的json格式数据如下(这不是console出来,方便显示我就直接把json数据复制过来)

{    "code": 0,    "data": {        "appId": "wx5beac*******7c40c",        "nonceStr": "8491k3******Rs5",        "package": "prepay_id=wx07**************2653",        "paySign": "CDE21B*************40C1A",        "signType": "MD5",        "timeStamp": "15******1"    },    "msg": null}

第二步:把数据传给onBridgeReady函数

所以真正需要获取的内容是 res.data.data,然后再把res.data.data的值传给onBridgeReady函数
4.重新整理一下代码就是

methods: {    _wechatPay(type, vid, token, point) {       wechatPay(type, vid, token, point).then(res => {            res = res.data            if(res.code === 0) {                this.onBridgeReady(res.data) // 这样就把res.data传给onBridgeReady函数            }       })    },    // 微信支付api相关配置文档    onBridgeReady(data) {      if (typeof WeixinJSBridge === 'undefined') {        this.$toast({ message: '请使用微信内置浏览器进行支付' })      } else {        WeixinJSBridge.invoke(          'getBrandWCPayRequest',          {            appId: data.appId, // 公众号名称,由商户传入            timeStamp: data.timeStamp, // 时间戳,自1970年以来的秒数            nonceStr: data.nonceStr, // 随机串            package: data.package,            signType: data.signType, // 微信签名方式:            paySign: data.paySign // 微信签名          },          res => {            if (res.err_msg === 'get_brand_wcpay_request:ok') {              this.$toast({ message: '支付成功' })              this.$router.push({path: '/videoplayer', query: { video_id: this.$route.query.video_id }}) // 支付成功之后跳转的路由            } else {              this.$toast({ message: '支付失败' })            }          }        )      }     },  }

支付宝支付

与微信支付不同的是,支付宝支付后台是返回form格式的数据,如下

那么在处理后台数据的时候用下面的方法(参考网络大神)

_wechatPay(type, vid, token, point) {     wechatPay(type, vid, token, point).then(res => {        const form = res.data        const div = document.createElement('div')        div.id = 'alipay'        div.innerHTML = form        document.body.appendChild(div)        document.querySelector('#alipay').children[0].submit() // 执行后会唤起支付宝     })}

转载地址:http://ljywl.baihongyu.com/

你可能感兴趣的文章
Java基础-String类常用方法
查看>>
轻量级移动设备即时通讯技术MobileIMSDK的常见问题解答
查看>>
管理H3C交换机
查看>>
Java_Index
查看>>
thymeleaf th:href 多个参数传递格式
查看>>
2008R2 组策略的应用
查看>>
enum
查看>>
java自增的陷井
查看>>
Apache2.4版本环境下基于虚拟主机、ssl、用户控制
查看>>
要卖的四本书的封面
查看>>
Linux下puppet安装
查看>>
python笔记--集合
查看>>
系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
查看>>
区别Ruby的require,load,和include
查看>>
VMware view连接vCenter提示证书错误,无法连接vCenter服务器
查看>>
http协议
查看>>
cobbler快速部署
查看>>
医药吧手机版的发布
查看>>
threading
查看>>
Excel中始终保持标题行可见
查看>>