uni-app支付功能
扫码查看原文
前言
近期一直在使用APP开发多端应用,IOS的APP、安卓的APP和H5网页,其中开发的APP使用到了微信和支付宝的支付,在此给大家分享出来,一起使用
前置条件:
开发环境:windows
开发框架:uni-app , H5+,nativeJS
编辑器:HbuilderX 2.8.13
4.兼容版本:安卓,IOS已作测试
此代码可以直接复制到uni-app项目中使用
正文开始:
1. 首先需要做一些相关配置
1.1 打开HbuilderX,配置manifest.json,选择App模块配置,勾选Payment支付;根据业务需要再勾选支付宝和微信支付;
1.2 微信支付需要配置appid、ios通用平台链接;支付宝在HbuilderX内无需任何配置;不过需要在支付宝付宝开放平台,创建应用时做一些配置。
2. 以下是具体代码页面部分
2.1 radio的值等于1,是微信支付,等于2是支付宝支付;通过@change事件获取到radio的值
<view class="pay_list_box">
<radio-group @change="radioChange">
<label class="pay_list">
<view class="l_box">
<view class="top">
<image class="t_img" src="/static/images/pay_icon2.png" mode=""></image>
<view>微信</view>
</view>
</view>
<view class="r_radio">
<radio value="1" color="#44bb53" style="transform:scale(0.8)"/>
</view>
</label>
<label class="pay_list">
<view class="l_box">
<view class="top">
<image class="t_img1" src="/static/images/pay_icon1.png" mode=""></image>
<view>支付宝</view>
</view>
</view>
<view class="r_radio">
<radio value="2" color="#44bb53" style="transform:scale(0.8)"/>
</view>
</label>
</radio-group>
</view>
<view class="zf_btn" @click="pay">提交</view>
3. 以下是样式部分
<style scoped lang="scss">
.zaixian{
padding-bottom: 100rpx;
border-top: 1px solid #ebebeb;
.content{
.money{
padding-top: 50rpx;
text-align: center;
height: 200rpx;
color: #F05D31;
line-height: 200rpx;
font-size: 100rpx;
}
.time{
text-align: center;
color: #a5a5a5;
font-size: 28rpx;
}
}
.code{
padding: 0 20rpx;
display: flex;
.shoukuanma{
text-align: center;
width: 50%;
height: 200rpx;
.type{
font-size: 30rpx;
color: #3b3b3b;
}
.ty_img{
width: 200rpx;
height: 200rpx;
}
}
} .pay_list_box{
margin-top: 100rpx;
.yinhangka{
font-size: 30rpx;
color: #3b3b3b;
padding: 0 20rpx;
display: flex;
height: 100rpx;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #ebebeb;
.y_left{
display: flex;
.name{
padding-right: 20rpx;
}
}
}
.pay_list{
border-bottom: 1px solid #ebebeb;
padding: 0 20rpx;
height: 100rpx;
align-items: center;
display: flex;
justify-content: space-between;
.l_box{
height: 100rpx;
.top{
height: 100rpx;
display: flex;
height: 100rpx;
align-items: center;
font-size: 30rpx;
color: #3b3b3b;
.t_img{
padding-right: 20rpx;
width: 46rpx;
height: 38rpx;
}
.t_img1{
padding-right: 32rpx;
width: 34rpx;
height: 33rpx;
}
.t_img2{
padding-right: 28rpx;
width: 38rpx;
height: 33rpx;
}
}
}
}
}
.pingzheng{
margin-top: 30rpx;
.content{
display: flex;
align-items: center;
padding: 0 20rpx;
height: 200rpx;
.shangchuan{
color: #454545;
font-size: 30rpx;
}
.sc_img{
padding-left: 20rpx;
width: 200rpx;
height: 200rpx;
border-radius: 5px;
}
}
.pz_pic{
margin-top: 30rpx;
padding: 0 20rpx;
.pz_img{
width: 100%;
height: 300rpx;
}
}
}
.zf_btn{
margin: 100rpx auto 0;
background-color: #44bb57;
width: 650rpx;
height: 90rpx;
font-size: 36rpx;
color: #FFFFFF;
line-height: 90rpx;
text-align: center;
border-radius: 45rpx;
}
}
</style>
4. 以下是具体的代码逻辑部分
4.1 通过后端获取到订单信息;再通过订单信息获取到服务商信息和支付配置信息
4.2 最后通过 uni.requestPayment 支付;
5.通过servicesInfo方法获取订单信息,取到订单的基本信息
5.1 向 pay 方法传递订单基本信息,获取到服务商信息和支付配置信息
5.2 通过 appPay 方法调用uni.requestPayment函数发起支付;
5.3 uni.requestPayment发起支付时,传递两个重要参数provider、orderInfo
5.3.1 provider:支付类型,支付宝(alipay)或者微信 (wxpay)
5.3.2 orderInfo: 通过 pay 方法请求接口获取到 order_info
6. 支付成功后,通过 updateOrder 方法改变订单状态
<script>
export default{
data(){
return{
imgs:[],
pay_type:0,
id:0,
info:[]
}
},
onLoad(response) {
this.id = response.id
this.servicesInfo()
},
methods:{
radioChange(e){
// 获取用选择的支付方式
this.pay_type = e.detail.value
},
//一、获取订单信息
servicesInfo:function(){
var that = this;
// 请求订单信息接口
that.$http.post("User/servicesInfo",{'id':that.id})
.then(function (response) {
that.info = response.data;
console.log(response);
});
}, //二、获取服务信息和支付配置信息
pay:function(){
var that = this;
if(that.pay_type == 0){
uni.showToast({
title:"请选择支付方式",
icon:"none"
})
return;
}
var url;
// 1 微信支付;2 支付宝支付
if(that.pay_type == 1){
url = 'Order/wxpay';
}else if(that.pay_type == 2){
url = 'Order/alipay';
}
// 请求服务信息和支付配置信息
that.$http.post(url,{'id':that.id,type:that.pay_type,'price':that.info.pay_price,'order_sn':that.info.order_sn}).then(function(response){
console.log(response);
// 调用支付
that.appPay(response.data,that.pay_type);
});
},
// 三、支付
appPay:function(data, type){
var that =this;
let pay_type = type == 1 ? 'wxpay' : 'alipay'
// 发起支付
uni.requestPayment({
provider: pay_type,
orderInfo: data.order_info, //微信、支付宝订单数据
success: (res) => {
// 支付成功,改变订单状态
that.updateOrder(data.out_trade_no,type)
},
fail: (err) => {
uni.showToast({
title:'支付失败',
'icon':'none'
})
}
})
},
//四、修改务订单状态
updateOrder:function(order_no,type){
var that = this;
that.$http.post('Order/updateOrder',{order_no:order_no})
.then(function(response) {
uni.showToast({
title:"支付成功",
icon:'none',
duration:2000
}) })
},
}
}
</script>
uni-app支付功能的更多相关文章
- asp.net core 微信APP支付(扫码支付,H5支付,公众号支付,app支付)之4
微信app支付需要以下参数,类封装如下 public class WxPayModel { /// <summary> /// 应用ID /// </summary> publ ...
- 使用PHP实现手机端APP支付宝的支付功能
最近应业务需求,做了支付宝支付和微信支付,今天分享一下手机端app支付宝支付对接流程,实际开发过程是前后端分离,前端调用后端API接口,实现功能返回数据,我所用的跨挤啊为TP5,大致可以分为四步: 1 ...
- ThinkPHP5.0 实现 app微信支付功能
相对于之前随笔写的<ThinkPHP5.0实现app支付宝支付功能>来说,php对接app微信支付功能就相对简单的多了,最近有加我的朋友问到app微信支付,所以我把app微信支付的demo ...
- 微信小程序支付功能前端流程
只是分享一下小程序支付功能的前端流程和代码, 仅供参考(使用的是uni app). handleCreate () { /** 第一步:前台将商品数据发送到后台,后台创建订单入库并返回订单id等信息 ...
- APP支付报错ALI40247处理方案!
简直日狗!这里要吐槽支付宝: 1.支付宝文档太复杂,分类虽然详细,但是我找不到app支付 对应服务端的demo 2.提供下载的sdk都是全整合的 用下来都是一条龙服务,还有一些客户端(app)的请求也 ...
- iOS之开发支付功能概述
前言:本随笔将对IOS开发的支付功能进行一个概述. 内容大纲: 一.常见的支付方案简介 二.第三方支付SDK 三.苹果官方支付方案 四.Web支付方案 正文: 一.常见的支付方案简介 在微信支付中 微 ...
- IOS开发之支付功能概述
前言:本随笔将对IOS开发的支付功能进行一个概述. 内容大纲: 一.常见的支付方案简介 二.第三方支付SDK 三.苹果官方支付方案 四.Web支付方案 正文: 一.常见的支付方案简介 在微信支付中 微 ...
- 微信app支付android客户端以及.net服务端实现
由于公司运营需要,需要在客户端(android/ios)增加微信以及支付宝支付,在调用微信app支付时遇到一些问题,也算是一些踩过的坑,记录下来 ,希望能对.net开发者服务端网站更快的集成微信app ...
- [5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)
1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...
- android支付宝app支付(原生态)-包括android前端与java后台
本文讲解了 android开发的原生态app集成了支付宝支付, 还提供了java后台服务器处理支付宝支付的加密代码, app前端与java后台服务器使用json数据格式交互信息,java后台服务主要用 ...
随机推荐
- SpringBoot输出日志到文件
1 基本信息 SpringBoot版本2.2.5 日志框架SLF4J 日志框架的实现LockBack 2 输出文件的配置 2.1 logging.file.name 指定日志文件的位置. 2.1.1 ...
- 力扣Leetcode 面试题51. 数组中的逆序对 - 归并排序
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出: 5 限制: 0 <= ...
- 解决Oracle12cr2自创建用户无法登录的问题
说明: 下面创建是创建CDB本地用户,不是PDB应用程序用户,如果是PDB应用程序创建语法会不一样.下面介绍创建CDB本地用户. 创建表空空间 CREATE TABLESPACE YH datafil ...
- 使用 Visual Studio 2019 批量添加代码文件头
应用场景介绍 在我们使用一些开源项目时,基本上都会在每个源代码文件的头部看到一段版权声明.一个项目或解决方案中源代码文件的个数少则几十,多则几千甚至更多,那么怎么才能给这么多文件方便地批量添加或者修改 ...
- 关于Vue-Router的那些事儿
Vue-Router Vu-router是Vue.js的官方路由管理器,方便于构建页面,在我们的使用过程中,一般是在router的index.js文件中配置对应的组件和对应的路径 主要的功能 嵌套路由 ...
- Keepalived之高可用LVS集群
前文我们聊了下keepalived的邮件通知相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13645163.html:今天我们来说说keepalive ...
- linux系统漏洞扫描工具lynis
lynis 是一款运行在 Unix/Linux 平台上的基于主机的.开源的安全审计软件.Lynis是针对Unix/Linux的安全检查工具,可以发现潜在的安全威胁.这个工具覆盖可疑文件监测.漏洞.恶意 ...
- [剑指Offer]66-构建乘积数组
题目 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1].不能使用除法. 题 ...
- 基于Socket的编程
2020/7/5 客户端步骤: 1.创建Socket. 根据指定服务端的IP地址或者端口号构造Socket类对象: Socket socket = new Socket(InetAddress. ...
- C语言01
从问题到C语言程序设计 1.1计算机的问题求解方法 程序设计面向的问题 什么问题可以用程序的方法解决? 打印九九乘法表 图形变换 文件压缩问题 ....... 一切可计算的问题 如何解决? 确定问题可 ...