uni-app实现支付及项目打包上传

news2024/10/3 8:18:19

        本文主要介绍uni-app项目中如何实现支付功能(支付宝支付、微信支付),及项目如何打包上传。

一、实现支付

        前置工作,项目要实现支付功能,首先要在根目录manifest.json文件内App模块配置中进行设置。

其中,appid需要登录微信开放平台加移动应用,审核通过后可获取应用ID(AppID,支付订单中需要使用)。

1.1 支付宝支付

        登录 支付宝开放平台 ,进入控制台页面创建移动应用,填写应用信息并提交审核,在应用详情页面的能力列表中添加APP支付功能,进入开发设置完成加密方式、IP白名单等开发信息,设置添加功能和配置密钥后(获取公钥、私钥,用于服务器生成订单),将应用提交审核,详情参考上线应用应用上线后,完成签约才能在生产环境使用支付功能。

        主要步骤如下:

1.获取支付厂商 uni.getProvider({service:"payment"});

2.用户发起支付 requestPayment(item,index){};

3.获取订单信息 getOrderInfo(item.id);

4.发起支付api。

详细代码如下:

<template>
	<view>
		<view class="title">支付</view>
		<view>
			支付金额:
			<input :value="price" maxlength="4" @input="priceChange" placeholder="请输入支付金额" />
			<view>
				<!-- #ifdef APP-PLUS -->
					<button size="mini" type="primary" v-for="(item,index) in providerList" :key="item.id" :loading="item.loading"  @click="requestPayment(item,index)">{{item.name}}支付</button>
				<!-- #endif -->
				
			</view>
		</view>
	</view>

</template>

<script>
	export default {
		data() {
			return {
				price: 1,
				providerList: [], //支付厂商,微信、支付宝
				openid: '', //用户id
			}
		},
		onLoad() {
			var that = this;
			//获取支付厂商
			uni.getProvider({
				service: 'payment',
				success: (e) => {
					console.log(JSON.stringify(e));
					var provider = e.provider;
					//映射一个格式(添加loading是否加载中)
					that.providerList = provider.map(item => {
						if (item === "apipay") {
							return {
								name: "支付宝",
								id: item,
								loading: false
							}
						} else if (item === "wxpay") {
							return {
								name: "微信",
								id: item,
								loading: false
							}
						}
					})
				}
			})
		},
		methods: {
			//实现支付
			async requestPayment(item, index) {
				//显示加载中
				item.loading = true;
				//获取订单信息
				let orderInfo = await this.getOrderInfo(item.id);
				//发起支付
				uni.requestPayment({
					provider: item.id, //提供商
					orderInfo: orderInfo, //订单信息
					//成功提示
					success: (e) => {
						console.log("success", e);
						uni.showToast({
							title: "感谢您的赞助!"
						})
					},
					//失败
					fail: (e) => {
						console.log("fail", e);
					},
					//停止加载中
					complete: () => {
						item.loading = false;
					}
				})
			},
			//获取订单信息
			getOrderInfo(provider) {
				//返回一个promiase
				return new Promise((resolve, reject) => {
					//请求订单信息
					uni.request({
						method: 'POST',
						url: 'https://97fca9f2-41f6-449f-a35e-3f135d4c3875.bspapp.com/http/pay',
						data: {
							provider, //支付厂商
							openid: this.openid, //openid(微信支付用)
							totalFee: Number(this.price) * 100, // 转为以为单位 
							platform: 'app-plus', //平台
						},
						success(res) {
							if (res.data.code === 0) {
								// 返回订单信息
								resolve(res.data.orderInfo)
							} else {
								// 失败
								reject(new Error('获取支付信息失败' + res.data.msg))
							}
						},
						fail(err) {
							// 请求失败
							reject(new Error('请求支付接口失败' + err))
						}
					})
				})
			},
			priceChange(e){
				this.price=e.detail.value;
			}
		}
	}
</script>

1.2 微信支付

        实现微信支付除了在微信平台获取appid外,还需要使用商户号和登录密码登录微信商户平台,进入 “账户中心” > “API安全” > “设置APIv2密钥” 设置API密钥(用于服务器生成订单),详情参考API证书及密钥。没有商户号,此步骤就不演示了,重点放在实现支付的代码上。

        主要步骤如下:

1. 用户点击发起支付 async weixinpay();

2. 获取openid 本地||loginMPweixin;

        2.1 获取code uni.login();

        2.2 获取openid uni.request({});

3. 获取订单信息 this.getOrderInfo('wxpay');

4. 根据订单信息发起支付 uni.requestPayment({...orderInfo})。

详细代码如下:

<template>
	<view>
		<view class="title">支付</view>
		<view>
			支付金额:
			<input :value="price" maxlength="4" @input="priceChange" placeholder="请输入支付金额" />
			<view>

				<!-- #ifdef MP-WEIXIN-->
					<button type="primary" size="mini" @click="weixinPay" :loading="loading">小程序微信支付</button>
				<!-- #endif -->
				
			</view>
		</view>
	</view>
</template>
<script>
export default {
		data() {
			return {
				price: 1,
				loading:false
			}
		},
		methods: {
			async weixinPay(){
				this.loading-true;//加载中
				//获取openid
				let openid=uni.getStorageInfoSync('openid');
				if(!openid){
					//执行登录获取openid
					openid=await this.loginMpWeixin();
					this.openid=openid;
				}
				//获取订单信息
				let orderInfo=await this.getOrderInfo('wxpay');
				//如果没有订单信息,弹出订单信息失败
				if(!orderInfo){
					uni.showModal({
						content:"获取订单信息失败",
						showCancel:false
					})
					return
				}
				//发起支付
				uni.requestPayment({
					...orderInfo,
					//成功
					success:(res)=>{
						uni.showToast({
							title:"感谢您的赞助!"
						})
					},
					//失败
					fail: (res) => {
						content:"支付失败,原因为:"+res.errMsg;
						showCancel:false
					},
					//移除loading
					complete: () => {
						this.loading=false;
					}
				})
			},
			loginMpWeixin(){
				//返回一个promise
				return new Promise((resolve,reject)=>{
					uni.login({
						provider:'weixin',
						success: (res) => {
							//login成功后会得到一个code
							//请求后端的登录
							uni.request({
								url:"https://97fca9f2-41f6-449f-a35e-3f135d4c3875.bspapp.com/http/user-center",
								method:'POST',
								data:{
									action:'loginByWeixin',
									params:{
										code:res.code,//传入code
										platform:'mp-weixin'
									}
								},
								success: (res) => {
									if(res.data.code!=0){
										reject(new Error('获取openid失败:',res.result.msg))
										return
									}
									//成功后存储openid
									uni.setStorageSync('openid',res.data.openid);
									//返回openid
									resolve(res.data.openid);
								},
								fail(err) {
									reject(new Error('获取openid失败:'+err));
								}
							})
						}
					})
				})
			},
			priceChange(e){
				this.price=e.detail.value;
			}
		}
	}
</script>

二、项目打包上传

        这是uni-app项目上线的最后一步,本着一处编码,多端使用的突出优势,项目打包有以下几种方式。

2.1 H5端打包上传

        配置相对地址 manifest.json web配置 运行的基础路径 

        修改完后,点击工具栏->发行->网站pc web或手机 。

 弹出弹窗,修改网站标题于网站域名(网站域名取对应项目的域名,一般为https/http开头)填完后直接点击发行。

        发行成功后,在项目根目录下会自动生成unpackage文件夹,unpackage --> dist --> build --> h5 文件夹, 在外部资源中打开,将 h5 文件夹打包成 zip 格式,然后给到运维,运维会帮忙发布到服务器,发布成功后,运维会给你一个属于 h5 项目的域名 https://xxxx.xxx.com/app/ 拿取H5域名去拼接页面,就能在浏览器中打开对应的页面了。 

2.2 微信小程序打包上传

        主要步骤有以下几个方面:

1. 配置id  manifest.json 微信小程序配置

2. 单击发行 发行->小程序微信

 

3. 进入小程序上传小程序右上角上传(先测试,真机测试)

 4. 微信提交审核 (mp.weixin.qq.com),进入网站,版本管理-->审核-->审核通过发布,一定要认真填写隐私协议,至关重要,否则大部分时间要花费在这一步上。

5. 网络请求配置域名必须是https开头, 开发管理-->服务器设置-->服务器域名

    request合法域名:uni.request,wx.request 请求的域名必须事先定义好;

    uploadFile合法域名:如果有上传也要配置上传的域名;

    downloadFile合法域名:配置下载域名。

2.3 应用商店打包上传

        当前主流的应用商店有华为、oppo、vivo、小米等。在众多应用商店中,目前仅华为一家允许个人身份进行上传App,其他商店都需要公司身份。打包上传需要提供app的版权证明;在这个过程中最重要的是应对国家的隐私条例,以及应用商店的隐私审核。

        主要步骤有以下几点:

1. 在manifest.json中进行设置

App图标配置

 2. 发行-->源生app-云打包

3.勾选打包配置

 4. 点击打包,在控制台中查看进度

5. 点击链接下载 apk 的安装包,并安装到 Android 手机中查看打包的效果。 

        如果整理的内容对你有用,欢迎收藏转发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机构运动学分析

背景介绍 空间机构具有结构紧凑、运动灵活等特点&#xff0c;在航空航天、精密仪器以及工业设备等领域具有广泛的应用。调研发现&#xff0c;机械臂一般采用伺服电机作为动力源&#xff0c;通过空间连杆驱动末端执行器&#xff0c;大大的减轻了工人的劳动强度。本节中主要是针对…

iconfont小图标从下载到引入到vue项目中的详细教程

地址&#xff1a;iconfont-阿里巴巴矢量图标库 iconfont小图标下载&#xff1a; &#xff08;1&#xff09;查找图标 在搜索框直接文字搜索或者看下面的小图标库&#xff0c;找想要的&#xff0c;每个小图标库都有一个名字&#xff0c;比如&#xff1a;“阿里云官网”&#x…

Vue2中$set的使用

一、什么场景下使用$set set为解决Vue2中双向数据绑定失效而生&#xff0c;只需要关注什么时候双向数据绑定会失效就可以了。 例如&#xff1a; 1.利用数组中某个项的索引直接修改该项的时候 arr[indexOfItem] newValue 2.直接修改数组的长度的时候 arr.length newLength …

gRPC学习笔记(一)

文章目录gRPC初学思维导图异步多函数多类的调用grpc初学总结&#xff1a;杂项gRPC初学思维导图 异步多函数多类的调用 一个类里有多个方法时&#xff0c; 两种方法&#xff1a; 定义不同的类&#xff08;推荐&#xff0c;只管自己的实现&#xff0c;换了请求类型&#xff0c;…

在linux系统上看全世界新闻 -- Clinews的使用详解

一. Clinews介绍 Clinews 和 InstantNews 类似&#xff0c;都是 Linux 命令行下的新闻客户端&#xff0c;安装及配置 Clinews 后就可以在 Linux 命令行下阅读新闻及头条新闻了&#xff0c; 当然还有博客新闻&#xff0c;不需要安装 GUI 应用或移动应用&#xff0c;轻松在 Linu…

值得收藏的30道Python练手题(附详解)

今天给大家分享30道Python练习题&#xff0c;建议大家先独立思考一下解题思路&#xff0c;再查看答案。 1.已知一个字符串为 “hello_world_yoyo”&#xff0c;如何得到一个队列 [“hello”,”world”,”yoyo”] &#xff1f; 使用 split 函数&#xff0c;分割字符串&#xf…

2022年最热门的短网址整理,让你不再选择恐惧

转眼一年又过去了&#xff0c;最近发现网络上有各种各样的短网址平台&#xff0c;让人眼花缭乱&#xff0c;都声称免费并且功能强大&#xff0c;但是据我的了解&#xff0c;很多免费的短网址都是有使用上的限制的&#xff0c;比如生成条数、访问次数、有广告等等、还有各种各样…

校招|拿到腾讯、阿里、字节等10家互联网测试开发岗的offer

前言 首先自我介绍一下&#xff0c;本人北京地区985本硕&#xff0c;工科非计算机专业&#xff0c;课程、毕设课题和编程以及测开都一点关系也没有。但是&#xff0c;通过自己的准备和实习积累的经验&#xff0c;在秋招的时候收获了10家互联网公司的测试开发岗和北京地区一些国…

数字图像处理(入门篇)四 像素关系

目录 1 像素关系 2 像素的领域 &#xff08;1&#xff09;4-邻域 &#xff08;2&#xff09;对角邻域 &#xff08;3&#xff09;8-领域 3 像素的邻接和连接 &#xff08;1&#xff09;4-连接 &#xff08;2&#xff09;8-连接 4 像素的连通 5 连通域 6 像素之间的距…

HMM隐马尔可夫模型

1.概率图模型&#xff1a;HMM&#xff08;隐马&#xff09;,MEMM&#xff08;最大熵&#xff09;,CRF&#xff08;条件随机场&#xff09;概率&#xff1a;既然是一个图那么就是一个有圈有边的结构&#xff0c;圈代表随机向量&#xff0c;随机变量之间有边&#xff0c;边上有概…

互联网企业面试必问 Spring 源码? 拿下Spring 源码,看完这篇就够了

前言 不用说&#xff0c;Spring 已经成为 Java 后端开发的事实上的行业标准。无数公司选择 Spring 作为基本开发框架。大多数 Java 后端程序员在日常工作中也会接触到 Spring。因此&#xff0c;如何很好地使用 Spring&#xff0c;已成为 Java 程序员的必修课之一。 同时&…

SoviChart数据可视化:散点图(Scatter plot)

什么是散点图 散点图也可以称为 x-y 图&#xff0c;用于展示数据的相关性和分布关系&#xff0c;由X轴和Y轴两个变量组成。通过因变量(Y轴数值)随自变量(X轴数值)变化的呈现数据的大致趋势&#xff0c;同时支持从类别和颜色两个维度观察数据的分布情况。 散点图通常用于显示和…

常见分布式事务解决方案

分布式事务&#xff1a;就是指事务的参与者、支持事务的服务器、资源服务器以及事务 管理器分别位于不同的分布式系统的不同节点之上。简单来说&#xff0c;分布式事务指 的就是分布式系统中的事务&#xff0c;它的存在就是为了保证不同数据库节点的数据一 致性。 聊到分布式事…

GIS工具maptalks开发手册(二)01——渲染点、文字和图片

GIS工具maptalks开发手册(二)01——渲染点、文字和图片 1、渲染点 效果 2、渲染文字 效果 3、渲染图片 效果 4.1、html单页面 <!DOCTYPE html> <html> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-wi…

【人工智能与机器学习】——K近邻(KNN)与模型选择(学习笔记)

&#x1f4d6; 前言&#xff1a;人们常常说&#xff0c;“近朱者赤&#xff0c;近墨者黑“&#xff0c;”物以类聚&#xff0c;人以群分”&#xff0c;&#xff0c;我们想考察一个家庭的经济状况&#xff0c;可以问问住在哪里。如果家住在广州珠江新城&#xff0c;经济状况一定…

Unity的机器学习工具包ML-Agents

官方&#xff1a;Unity ML-Agents深度学习工具包&#xff5c;Unity中国官网 | Unity中国官网 Github下载链接&#xff1a;https://github.com/Unity-Technologies/ml-agents ML-Agents是游戏引擎Unity3D中的一个插件&#xff0c;也就是说&#xff0c;这个软件的主业是用来开发…

初始操作系统之进程

文章目录一、什么是操作系统二、进程PCB内存管理一、什么是操作系统 操作系统*&#xff08;英语&#xff1a;Operating System&#xff0c;缩写&#xff1a;OS&#xff09;*是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统…

Mybatis的BindingException异常产生原因及解决办法详解

一. 问题背景 今天壹哥在讲完MyBatis后&#xff0c;有学生在进行代码练习时遇到了下面这样的一个异常&#xff0c;先上图&#xff1a; 二. 问题分析 1. 原因分析 首先我们看到&#xff0c;这里抛出的异常是org.apache.ibatis.binding.BindingException&#xff0c;接着再看异…

老板说我最近飘了,都敢用 MySQL 实现分布式锁了

​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 以前参加过一个库存系统&#xff0c;由于其业务复杂性&#xff0c;搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说&#xff0c;有定时任务…

专为医疗领域打造!飞凌嵌入式新一代FDU显控一体机发布

飞凌嵌入式重磅推出一款专为医疗打造的显控一体机——FDU070K02 & FDU101K02。产品采用无外壳设计、支持戴医疗手套触摸&#xff0c;支持双屏同显或异显&#xff0c;兼顾场景灵活性与使用便捷性。 同时飞凌为用户提供开箱即用的硬件和操作系统&#xff0c;极大简化了开发流…