网站首页 > 技术文章 正文
在前段时间的开发需求中,有一项uniapp H5和APP端接入支付宝功能的需求,虽然这项功能前端的工作并不多,但还是根据这次的开发经验和踩过的坑做一个分享。
首先在对项目开启支付功能,在项目的manifest.json文件中勾选APP模块配置中的Payment支付模块,并且勾选支付宝支付和下面列出的ios和Android
根据需要在h5跟APP端都做支付宝的唤起支付,唤起orderInfo 的格式在APP和h5上有很大的差异,在这一点上浪费了一些时间,在此贴出支付宝的文档
支付宝开发文档
H5端唤起支付宝。所需要的参数是后端返回的一个form表单,获取成功后端返回的内容以后将表单内容用v-html置入标签中,然后提交表单便会执行唤起
针对于支付宝支付的使用,截取核心代码如下
<template>
<view>
<!-- 省略无关内容 -->
<view class="alipaysubmit" v-html="formContent"></view>
</view>
</template>
<script>
export default {
data(){
return {
formContent:''
}
},
methods:{
getOrderPay: function(orderNo, message) {
let that = this;
let goPages = '/pages/order_pay_status/index?order_id=' + orderNo + '&msg=' + message;
wechatOrderPay({
orderNo: orderNo,
payChannel: that.payChannel,
payType: that.payType,
scene: that.productType==='normal'? 0 :1177 //下单时小程序的场景值
}).then(res=>{
switch (res.data.payType) { //支付类型
case 'alipay': //支付宝支付
//#ifdef H5
if (this.$wechat.isWeixin()) {
uni.redirectTo({
url: `/pages/users/alipay_invoke/index?id=${orderNo}`
//公众号中使用支付宝支付是做了一个到浏览器中支付的引导,因为微信浏览器不支持唤起支付宝
});
} else {
//h5支付
uni.hideLoading();
that.formContent = res.data.alipayRequest; //后端给的form表单,也是唤起支付宝的关键
that.$nextTick(() => {
document.forms['punchout_form'].submit();
//这里就是提交表单唤起支付宝,中括号中的name名称,要与后端给的form表单name名称一致,
})
}
//#endif
// #ifdef APP-PLUS
let alipayRequest = res.data.alipayRequest;
uni.requestPayment({
provider: 'alipay',
orderInfo: alipayRequest, //APP端唤起支付宝所需的orderInfo,数据类型为string
success: (e) => {
uni.showToast({
title: "支付成功"
})
setTimeout(res => {
uni.navigateTo({
url:'/pages/users/alipay_return/alipay_return?out_trade_no=' + orderNo + '&payChannel=' + 'appAlipay'
})
}, 1000)
},
fail: (e) => {
uni.showModal({
content: "支付失败",
showCancel: false,
success: function(res) {
if (res.confirm) {
//点击确认的操作
uni.navigateTo({
url:'/pages/users/alipay_return/alipay_return?out_trade_no=' + orderNo + '&payChannel=' + 'appAlipay'
})
} else if (res.cancel) {
}
}
})
},
complete: () => {
uni.hideLoading();
},
});
// #endif
break;
}
})
}
}
}
</script>
其实开发完成以后发现APP端唤起支付宝更为简单,但是这个过程中踩过一个坑,我以为orderInfo的值可以参照文档和后端给的一些键值对在前端自己拼接,但是总是唤起失败,后来联系支付宝的蚂蚁技术支持中心的客服,经过沟通以后,才知道这个orderInfo必须在后端用支付宝SDK生成以后返回给前端,这样一来,果然唤起成功。加粗样式
猜你喜欢
- 2024-12-26 最新CRMEB商城多商户java版源码v1.6版本+前端uniapp
- 2024-12-26 React NextJS App Router 实时获取API
- 2024-12-26 六、uni-app + vue3 + ts + vite 响应式原理
- 2024-12-26 一个人生活必须要知道的几款App,告别空虚寂寞冷
- 2024-12-26 看看汽车充电app界面的设计,是不是一场创意盛宴
- 2024-12-26 印度欧美APP商城前端源码下载/多店铺PHP商城源码下载
- 2024-12-26 基于vue.js+uniapp后台管理系统uni-uadmin
- 2024-12-26 基于 vue.js 可视化拖拽低代码VisualDrag
- 2024-12-26 想积累实战经验吗?前端教程_ReactNative项目之美食App不容错过
- 2024-12-26 一、Uni-app + Vue3 + TS +Vite 创建项目步骤
你 发表评论:
欢迎- 494℃几个Oracle空值处理函数 oracle处理null值的函数
- 489℃Oracle分析函数之Lag和Lead()使用
- 488℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 476℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 469℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 464℃【数据统计分析】详解Oracle分组函数之CUBE
- 448℃Oracle有哪些常见的函数? oracle中常用的函数
- 442℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 最近发表
-
- Spring Boot跨域难题终结者:3种方案,从此告别CORS噩梦!
- 京东大佬问我,SpringBoot为什么会出现跨域问题?如何解决?
- 在 Spring Boot3 中轻松解决接口跨域访问问题
- 最常见五种跨域解决方案(常见跨域及其解决方案)
- Java Web开发中优雅应对跨域问题(java跨域问题解决办法)
- Spring Boot解决跨域最全指南:从入门到放弃?不,到根治!
- Spring Boot跨域问题终极解决方案:3种方案彻底告别CORS错误
- Spring Cloud 轻松解决跨域,别再乱用了
- Github 太狠了,居然把 "master" 干掉了
- IntelliJ IDEA 调试 Java 8,实在太香了
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)