【uni-app】总结uni-app订单支付和打包发布

news2024/10/3 4:34:09

前言


总结uni-app订单支付和打包发布

1- 支付


1.1 app的支付

1.1.1 准备工作

支付厂商 获取id

  • 去微信支付平台接入微信支付

在这里插入图片描述

  • 支付宝

打包时候

  • mainifest.json文件下,找到 app模块配置 ,勾选payment支付

在这里插入图片描述

1.1.2 代码
  • 获取支付厂商 uni.getProvide()
uni.getProvider({service:"payment"})
  • 用户发起支付
requestPayment(item,index){}
  • 获取订单信息
getOrderInfo(item,.id)
  • 发起支付api
uni.requestPay,ment({
 provider:item.id, //提供商
orderInfo:orderInfo,//订单信息})

1.2 小程序的支付

  • 用户的点击 发起支付
async weixinPay()
  • 获取openid
//本地存储 ||loginMpWeixin
//获取code 
uni.login({})
//获取openid 
uni.request({})
  • 获取订单信息 this.getOrderInfo(‘wxpay’)
this.getOrderInfo('wxpay')
  • 根据订单信息发起支付
uni.requestPayment({...orderInfo})

在这里插入图片描述

1.3 完整代码

<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 -->
				<!-- app支付 -->
				<!-- #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
				loading:false,//小程序微信支付
			}
		},
		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==="alipay"){
							return {
								name: '支付宝',
								id: item,
								loading: false
							}
						}else if(item==="wxpay"){
							return {
								name: '微信',
								id: item,
								loading: false
							}
						}
					})
				}
			})
		},
		methods: {
			async weixinPay(){
				this.loading = true;//加载中
				// 获取openid
				let openid = uni.getStorageSync('openid')
				if(!openid){
					// 执行登录获取openid
					openid = await this.loginMpWeixin();
					this.openid = openid;
					if (!openid) {
						uni.showModal({
							content: '获取openid失败',
							showCancel: false
						})
						this.loading = false
						return
					}
				}
				// 获取订单信息
				let orderInfo = await this.getOrderInfo('wxpay')
				// 如果没有订单信息,弹出订单信息失败
				if (!orderInfo) {
					uni.showModal({
						content: '获取支付信息失败',
						showCancel: false
					})
					return
				}
				// 发起支付
				uni.requestPayment({
					...orderInfo,
					// 成功
					success: (res) => {
						uni.showToast({
							title: "感谢您的赞助!"
						})
					},
					// 失败
					fail: (res) => {
						uni.showModal({
							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('res获取openid失败:', res))
										return
									}
									// 成功后存储opendi
									uni.setStorageSync('openid', res.data.openid)
									// 返回openid
									resolve(res.data.openid)
								},
								fail(err) {
									reject(new Error('获取openid失败:' + err))
								}
							})
						}	
					})
				})
			},
			// 实现支付
			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) {
				// 返回一个promise
					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>

2- 打包发布


2.1 h5—打包html代码上传服务器

  1. 首先可以先配置相对地址,我们先找到自己项目里的mainifest.jsonweb配置—>微信小程序配置,填写对应的运行的基础路径./

在这里插入图片描述

  1. 点击发行—> 网站-PC或手机H5(仅适用于uni-app)

2. 发行----发到网站--pc

  1. 打包完成之后,可以根据提示看到文件的路径,unpackage---dist---build--h5

在这里插入图片描述

  1. 上传到服务器(可以用flashFX工具上传)

2.2 打包微信小程序上传

  1. 在自己项目的 mainifest.json下,配置AppID等操作
    在这里插入图片描述

  2. 点击发行---->小程序–微信(适用于uni-app)

在这里插入图片描述

  1. 进入微信开发者工具,进行小程序上传;首先点击小程序右上角上传(友情提示:先进行测试,真机测试)

在这里插入图片描述

  1. 提交之后,去微信开发平台,查看自己提交的版本,进入版本管理

在这里插入图片描述

  • 如果有网络请求,配置域名必须是https开头:开发管理------>服务器设置------>服务器域名
    • request合法域名:uni.request,wx.request请求的域名必须事先定义好
    • uploadFile合法域名:如果有上传也要配置上传的域名
    • downloadFile合法域名:配置下载域名

在这里插入图片描述

2.3 app打包上传应用商店

App在各大安卓应用商店上架要求汇总

1、 首先在各大应用商店注册账号。 法人手机号,名字,身份证材料准备好,完成开发者实名认证;

2、 软著是必要的,提前准备好,软著申请大概需要1-2周时间才能下来。提前把APP名字想好,然后同步准备软著;

3、需要注意,部分类型的软件要求 提供特定的许可证书。比如,华为应用商店要求金融征信类APP提供ICP证(《互联网新闻信息服务许可证》/《ICP经营许可证》);

某应用商店对不同类APP许可证的要求

4、部分商店、部分类型的APP需要提交免责书承诺函等材料。比如,华为、百度、360、vivo、oppo应用商店要求提交承诺函;

某应用商店对上传图标的要求

6、提前准备APP的名称(注意要和软著的APP名字一致,用于应用商店搜索和下载至桌面显示)、关键词(几个词语,可展示本App主要功能、所属行业等信息,用于APP模糊搜索)、宣传文本(用于介绍公司或APP。会显示在APP描述上方)、描述文本(详细描述APP的主要功能、可实现效果、受众群体等)、主要类别(可选择一个主要和次要分类,可针对本公司APP定位选择)、技术支持网站、隐私政策网站、APP版本号、版权信息(公司名称)、审核需提供测试账号(如APP需要登录则需提供账号以供测试)、审核过程中的联系人(姓名、电话、邮箱)。

7、隐私协议一定填写完整详细

某应用商店对APP介绍的要求

注意:一定要注意各个商店对不同APP的分类,仔细阅读对应的要求,按照要求准备申请材料和上传操 作;上传前APP一定要测试完全没有问题,以免延长审核周期,带来后续问题。

总结:

  1. 应用商店:华为、oppo、vivo、小米
  2. 现在只有华为可以个人上传,其他都必须是公司
  3. 个人上传:app的版权证明
  4. 最难的一点就是国家的隐私条例和应用商店的隐私审核
  1. 点击 HBuilderX 状态栏左侧的未登录按钮,弹出登录的对话框:
  2. 在弹出的登录对话框中,填写账号和密码之后,点击登录即可

在这里插入图片描述
3. 打开项目根目录中的manifest.json配置文件,在基础配置面板中,获取uni-app 应用标识,并填写应用名称:

在这里插入图片描述
4. 切换到 App 图标配置面板,点击浏览按钮,选择合适的图片之后,再点击自动生成所有图标并
替换即可:

在这里插入图片描述
5. 点击菜单栏上的 发行 -> 原生 App-云打包

在这里插入图片描述
6. 勾选打包配置如下:

在这里插入图片描述

  1. 控制台查看打包的进度信息
    在这里插入图片描述

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


往期传送门


【uni-app】总结vuex+常用api+内置组件+自定义组件+第三方插件的运用(建议收藏)
【uni-app】详细总结uni-app基础知识和如何配置项目,运行到模拟器和小程序端,附案例和图(建议收藏)

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

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

相关文章

Spring Boot 程序优化的 14 个小妙招!

1.定义配置文件信息 有时候我们为了统一管理会把一些变量放到yml配置文件中 例如 图片 用 ConfigurationProperties 代替Value 使用方法 定义对应字段的实体 Data // 指定前缀 ConfigurationProperties(prefix "developer") Component public class Developer…

数据看板是什么?

一 数据看板定义 数据看板是数据可视化的载体。数据看板是一个可视化工具&#xff0c;通过合理的页面布局、效果设计&#xff0c;将可视化数据更直观、更形象的展现出来&#xff1b;数据看板是一个交流工具&#xff0c;通过数据公开和呈现&#xff0c;公司内部能够共享有效信息…

大二学生基于Html+Css+javascript的网页制作——动漫设计公司响应式网站模板 (10个页面)

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

JAVAWEB_实验二 JSP 的内置对象

文章目录一、Part 1 JSP 的内置对象一、实验目的二、实验要求三、实验内容二、Part 2 JSP 的内置对象一、实验目的二、实验要求三、实验内容思考&#xff1a;页面重定向有哪些方式&#xff1f;区别时什么&#xff1f;一、Part 1 JSP 的内置对象 一、实验目的 通过编程和上机实…

算法刷题打卡第33天:香槟塔

香槟塔 难度&#xff1a;中等 我们把玻璃杯摆成金字塔的形状&#xff0c;其中第一层有 1 个玻璃杯&#xff0c;第二层有 2 个&#xff0c;依次类推到第 100 层&#xff0c;每个玻璃杯 (250ml) 将盛有香槟。 从顶层的第一个玻璃杯开始倾倒一些香槟&#xff0c;当顶层的杯子满…

【JavaWeb】Servlet系列 --- 使用纯Servlet做一个单表的CRUD操作(oa小项目,超详细笔记)

使用纯Servlet做一个单表的CRUD操作实现步骤第一步&#xff1a;准备一张数据库表&#xff08;sql脚本/可视化工具&#xff09;第二步&#xff1a;准备一套HTML页面&#xff08;页面原型&#xff09;【前端开发工具使用vscode / IDEA】第三步&#xff1a;分析我们这个系统包括哪…

分布式共识协议 Raft 是如何工作的?

Raft 解决的问题 提供一种共识算法&#xff08;分布式一致性算法&#xff09;。 Paxos是早先的一个分布式共识算法&#xff0c;Paxos 逻辑复杂而难以理解和实现。相比早先的 Paxos&#xff0c; Raft 提供一个容易理解和实现的共识算法&#xff0c;在很多的系统比如 etcd, ozon…

力扣hot100——第3天:11盛最多水的容器、21合并两个有序链表、22括号生成

文章目录1.11盛最多水的容器1.1.题目1.2.解答1.2.1.题解1.2.2.自己对参考题解的进一步解释2.21合并两个有序链表2.1.题目2.2.题解3.22括号生成3.1.题目3.2.题解1.11盛最多水的容器 参考&#xff1a;力扣题目链接&#xff1b;题解 1.1.题目 1.2.解答 1.2.1.题解 这道题目可以…

GIS工具maptalks开发手册(一)——hello world初始化

GIS工具maptalks开发手册(一)——hello world初始化 为何使用maptalks&#xff1f; ​ Maptalks项目是一个HTML5的地图引擎, 基于原生ES6、Javascript开发的二三维一体化地图。 通过二维地图的旋转、倾斜增加三维视角&#xff0c;通过插件化设计, 能与其他图形库echarts、d3.…

微信小程序实战十四:小程序及APP端实现客服功能

文章目录 1.效果预览2.小程序后台添加客服3.小程序代码中集成客服4.APP中添加客服5.企业微信登陆6.获取企业ID值7.设置多客服说明:项目用uni开发的,有小程序版本和APP版本,最开始项目中集成了第三方美洽的客服,2个客服一年收3600,老哥咨询我是否有稍微优惠点的方案,老哥带…

QuEra将研发可重构中性原子量子计算机

&#xff08;图片来源&#xff1a;网络&#xff09; 上个月&#xff0c;借助Amazon Braket&#xff0c;QuEra Computing开始提供对其中性原子量子系统Aquila的访问, Aquila具有256个量子比特。如今&#xff0c;量子公司的数量与日俱增&#xff0c;QuEra是其中之一&#xff0c;它…

java httpclient的digest验证(可恨,找遍全网没有靠谱的,不是少包就是少文件。含泪整理o(╥﹏╥)o~~~~)

背景&#xff1a;调用第三方接口&#xff0c;使用的是digest auth鉴权方式&#xff0c; basic auth和digest auth比较&#xff1a; basic认证是把用户和密码通过base64加密后发送给服务器进行验证。 Basic认证过程简单&#xff0c;每次请求都有发送密码。安全性较低。 为了解决…

[附源码]JAVA毕业设计衡师社团管理系统(系统+LW)

[附源码]JAVA毕业设计衡师社团管理系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

【allegro 17.4软件操作保姆级教程八】布线操作基础之三

目录 1.1扇出操作 1.2差分对过孔间距调整 1.3差分线换层自动添加回流过孔 1.4多人协同操作 1.5导入pin delay 1.6走线导圆弧 1.1扇出操作 关于信号扇出有如下一些需要注意的点&#xff1a; 1、过孔扇出要考虑其间距&#xff0c;要求2个过孔之间保证能过一根信号线&#x…

java+jsp基于ssm的校园OTO超市系统-计算机毕业设计

项目介绍 本网站主要是针对高校学生以超市购物为重点开发的网站。系统从用户上分为三种&#xff1a;卖家、买家和游客。系统从模块分为买家模块和卖家模块&#xff0c;买家模块包括用户注册登录、商品浏览、商品详情、商品加入购物车、购物车中商品删除、购物车商品数量变更、…

vue 微信登录

文章目录前言一、第一步用户授权获取code1、PC扫码方式一方式二&#xff1a;踩坑记录2、移动端微信内置浏览器授权获取code二、第二步 通过code获取access_token三、获取用户个人信息前言 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信…

没想到吧,Spring中还有一招集合注入的写法

Spring作为项目中不可缺少的底层框架&#xff0c;提供的最基础的功能就是bean的管理了。bean的注入相信大家都比较熟悉了&#xff0c;但是有几种不太常用到的集合注入方式&#xff0c;可能有的同学会不太了解&#xff0c;今天我们就通过实例看看它的使用。 首先&#xff0c;声…

[附源码]JAVA毕业设计衡水特产展销系统(系统+LW)

[附源码]JAVA毕业设计衡水特产展销系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

正则匹配删除指令

// 删除以 SameSeed 开头的整行 ^SameSeed.*$执行前&#xff1a; 执行后&#xff1a; 这样我们就可以在代码发布时删除代码中所有的调试信息&#xff0c;使代码中不包含任何 DEADCODE&#xff0c;但这样会导致一个问题&#xff0c;就是会出现一个空行&#xff0c;同时代码中…

生命在于学习——docker逃逸

注意&#xff1a;本篇文章仅用于学习记录&#xff0c;不得用于其他用途。 一、docker逃逸 docker逃逸就是从当前docker容器权限中逃逸出来&#xff0c;获得宿主机的权限。 二、常见的逃逸方法 1、配置不当引起的逃逸 &#xff08;1&#xff09;Docker Remote API未授权访问…