vue玩转移动端H5微信支付和支付宝支付
业务场景介绍:
H5移动端支持微信支付 [ 微信支付分为微信内支付(JSAPI支付官方API)和微信外支付(H5支付官方API)] && 支付宝支付 [手机网站支付转 APP 支付 官方API ]
订单生成逻辑:前端请求后端提交订单,后端去和微信或者支付宝对接生成订单(后续支付都是这个逻辑进行的对接)
一、移动端微信支付,vue中如何玩?
在移动端微信支付分为微信内支付和微信外支付。
1.在订单组件中选择支付方式之后在支付页面先去判断是否是在微信内:
//判断是否微信is_weixn(){var ua = window.navigator.userAgent.toLowerCase();if (ua.match(/MicroMessenger/i) == 'micromessenger'){return true;} else {return false;}},
2.触发立即支付方法,根据微信内外的不同请求后端不同的接口,如果是微信外支付非常简单了~
3.【微信外支付】下面先看微信外支付,官方文档也写的很清楚,后端返回一个url地址,前端的工作就是拿到这个url地址进行跳转就可以了,看一下2-3步代码:
handelPay() {if(this.wechatpayType == 'wxpay'){// console.log("微信内支付")let data={amount:this.number,}this.$http.insideWeChatPay(data).then( res => {if(res.data.code === 200){this.weChatParameter=res.data.data// console.log(this.weChatParameter,"微信内支付需要参数")this.weixinPay()}else{Toast({message: res.data.msg,position: 'middle',duration: 1000});}});} else if(this.wechatpayType == 'wxpay_php'){// console.log("微信外支付")let data={amount:this.number,}this.$http.outsideWeChatPay(data).then( res => {if(res.data.code === 200){let url=res.data.datawindow.location.replace(url) //这里是后端返回的URL直接进行跳转即可完成微信外支付}else{Toast({message: res.data.msg,position: 'middle',duration: 1000});}});}},
4.在调起支付的页面监听从其他页面返回的事件,进行一些刷新业务逻辑的实现即可,至此微信外支付已经完成。
document.addEventListener("visibilitychange", function() {//需要的操作
});
5.【微信内支付】微信内支付比起微信外支付稍微复杂一点,但是也不难,(3步骤代码里面已经请求支付方式接口拿到了微信内支付所需要的参数)根据官方API
微信内置js对象 WeixinJSBridge,进行开发,至此微信浏览器内支付已经完成
//解决微信内置对象报错weixinPay(data){var vm= this;if (typeof WeixinJSBridge == "undefined"){if( document.addEventListener ){document.addEventListener('WeixinJSBridgeReady', vm.onBridgeReady(data), false);}else if (document.attachEvent){document.attachEvent('WeixinJSBridgeReady', vm.onBridgeReady(data));document.attachEvent('onWeixinJSBridgeReady',vm.onBridgeReady(data));}}else{vm.onBridgeReady();}},//微信内置浏览器类,weChatParameter对象中的参数是3.步骤代码中从后端获取的数据onBridgeReady(){var vm = this;var timestamp=Math.round(vm.weChatParameter.timeStamp).toString();WeixinJSBridge.invoke('getBrandWCPayRequest',{debug:true,"appId":vm.weChatParameter.appId, //公众号名称,由商户传入"timeStamp":timestamp, //时间戳,自1970年以来的秒数"nonceStr":vm.weChatParameter.nonceStr, //随机串"package":vm.weChatParameter.package,"signType":vm.weChatParameter.signType, //微信签名方式:"paySign":vm.weChatParameter.paySign, //微信签名jsApiList: ['chooseWXPay']},function(res){// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。if(res.err_msg == "get_brand_wcpay_request:ok" ){Toast({message: '支付成功',position: 'middle',duration: 3000});vm.number=nullvm.$router.go(-1)//window.location.href = vm.BASE_URL + 'index.html#/depositResult'}else{Toast({message: '支付失败',position: 'middle',duration: 3000});}});},
6.微信内部浏览器支付也可以封装一下,在全局都可以直接调用:
//微信浏览器支付
function wxpay(params,callback){if (typeof WeixinJSBridge == "undefined"){if( document.addEventListener ){document.addEventListener('WeixinJSBridgeReady', onBridgeReady(params,callback), false);}else if (document.attachEvent){document.attachEvent('WeixinJSBridgeReady', onBridgeReady(params,callback)); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady(params,callback));}}else{onBridgeReady(params,callback);}
}function onBridgeReady(params,callback){var that = thisWeixinJSBridge.invoke('getBrandWCPayRequest', {"appId":params.appId, "timeStamp":params.timeStamp, "nonceStr":params.nonceStr, "package":params.package, "signType":params.signType, "paySign":params.paySign },function(res){ callback(res)}); }
7.组件中调用微信支付:
this.commonUtils.wxpay(res.data.data,function(payResult){if(payResult.err_msg == "get_brand_wcpay_request:ok" ){//执行}
})
二、移动端支付宝支付,vue中如何玩?
其实支付宝支付也有H5支付和支付宝浏览器支付,这里只做H5支付,因为已经满足了业务需求。
1.支付宝中的H5支付和PC端的一样,主要是后端的工作量,后端完成订单的生成之后返给前端的是form表单,前端只需要负责做页面的跳转即可:
//立即支付按钮onSubmit() {if (this.payWay == 1) {//支付宝支付this.$router.push({path: '/aliPay', query: {orderId: this.orderId}});} else if (this.payWay == 2) {//微信支付,这里跳转到本文的微信支付模块的3.步骤handelPay方法}},
2.选择支付宝方式之后进入支付宝承载页面:
<template><div v-html="html"></div>
</template>
<script>export default {data(){return{html:''}},methods:{fetchVideoPay(){let param={orderId: this.$route.query.orderId};this.$api.orderpage.videoAliPay(param).then( res => {this.html = res.data;this.$nextTick(() => {document.forms[0].submit() //渲染支付宝支付页面})})}},mounted(){this.fetchVideoPay()}}
</script>
当然不想写承载页的还有其他方法调起支付,具体逻辑具体分析,根据不同的业务类型去变通比如:
const div = document.createElement('div');
div.innerHTML = (res.data); //res.data是返回的表单
document.body.appendChild(div);
document.forms.alipaysubmit.submit();
3.进入到支付宝支付页(至此但有一个问题,调起支付后,用户中途取消支付或者点返回键会整个网页一起关闭退出,或者一直在进入支付页面,不知道有没有更好的SEO方案)
vue玩转移动端H5微信支付和支付宝支付相关推荐
- Vue app安卓端移动端实现微信支付和支付宝支付
当前项目借助调用安卓和ios方法跳转第三方支付平台实现微信支付和支付宝支付 涉及到的安卓方法: window.AndroidFunction.wxpay('传递的参数') // 点击确认支付hand ...
- 腾腾流氓,云云更流氓(问微信怎样接入支付宝支付),手贱的赶紧点,你会感谢我的...
草原上的两匹马! 打从当年微信开始布局公众号之初时,估计就已经想到了与支付宝正面冲突的场面,所以微信先来个瞒天过海,在春晚搞了个微信红包,那叫一个火呀,此时的云云隐隐感觉到些许不安. 早期的微信开发者 ...
- “一码多付”,微信支付、支付宝支付
写着写着,越写越多,思绪写不下了,回头写在前面的话.此系统属个人创业项目,历时3个月,主要实现自助按摩椅.娃娃机.自动换币器功能,主要流程就是用户扫码二维码->授权获取用户信息->弹出H5 ...
- 微信支付和支付宝支付整合(含设计模式1)
微信支付和支付宝支付整合(含设计模式1) 1.说明: 设计模式:单例+策略模式+抽象 在开发中经常对接微信支付和支付宝支付,相对来说,阿里的文档比微信的接口文档清晰一点,这里用的第三方库(com.gi ...
- 微信支付,支付宝支付,银联支付——三大支付总结
银联支付,支付宝支付,微信支付的三大总结,之前也有写过两篇. 微信支付,支付宝支付,银联支付--三大支付总结: http://blog.csdn.net/androidstarjack/article ...
- java实现微信支付与支付宝支付接口
因为公司要求需要写支付宝支付与微信支付现在写完了,总结一下: 支付宝支付: 支付宝支付比较简单首先我说一下支付宝支付与微信支付大概的流程,就拿支付宝支付来说(微信同理) 首先去蚂蚁金服注册一下App ...
- springboot版本的微信支付和支付宝支付
最近公司需要做一个在微信公众号中实现支付宝支付的项目 网上找了很多资料和问了好久的支付宝客服 终于整理出一份跑的通的项目 注意:微信支付和支付宝支付需要公司资质 微信公众号中使用微信支付是JSAPI进 ...
- 微信支付和支付宝支付
微信支付和支付宝支付开发案列 以下基础方法可以参考支付宝支付开放平台(https://doc.open.alipay.com/docs/doc.htm?treeId=204&articleId ...
- 【Java】快速集成微信支付和支付宝支付
本文介绍博主自己封装的一个微信支付和支付宝支付的library apppay_library:https://github.com/gumingwei/app_pay 本项目解决的问题仅限于最后的支付 ...
最新文章
- UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式
- (网页)css和js的版本号问题
- 清新BLOG-CMS博客主题源码
- (21)xilinx PCIE 开发方法(学无止境)
- 21 个 curl 命令练习 | Linux 中国
- AT0 Intrudoction
- Python使用scrapy框架编写自动爬虫爬取京东商品信息并写入数据库
- MATLAB2014b安装
- C/C++ abs 函数 - C语言零基础入门教程
- 自媒体运营技巧之抖音快手怎么上热门
- 词类与句子成分对应关系 —— 状语篇
- Coolpad/酷派炫影5890 root教程_方法
- JavaScript对象 、堆与栈
- 经典算法之左边界二分查找法(俗称左边界二分搜索法)
- linux系统中如何查ip,在Linux系统中查看ip的命令是什么
- 一个球从100米高度自由下落,每次落地后反跳回原来的高度的一半,再落下;
- 共享纸巾“初纸”获数千万元A轮融资,水滴石基金领投
- 05. 路由协议原理
- 物联网实验-温湿度实时监测系统
- 怎样清理苹果电脑磁盘空间_Macbook苹果电脑提示磁盘空间不足怎么办【解决方法】...
热门文章
- 初学Java 从0-1创建Spring boot+Mybatis - plus+Swagger2+Mysql(代码生成器)
- 桌面不显示我的计算机显示器,电脑桌面显示怎么分屏显示不出来怎么办
- Negroni和Gorilla/mux 解析 Golang
- UART模块验证-面试总结
- 在Java里面使用Pairs或者二元组
- (6)EndNote——文献管理软件通用操作大全
- MIMO-OFDM无线通信技术及MATLAB实现(3)MIMO信道模型
- 【方向盘】启动命令和IDEA如何传递:VM参数、命令行参数、系统参数、环境变量参数、main方法参数
- [运算放大器]佛朗哥笔记 - 电阻性反馈电路 - 差分放大器与仪表放大器
- 支付宝schlum url 启动指定界面