uni-app 超详细教程(三)(从菜鸟到大佬)

news/2024/4/20 14:12:40/文章来源:https://blog.csdn.net/m0_64875238/article/details/128137303

本文中内容为:

1. 支付功能(微信支付支付宝支付

2. 项目打包:(APP打包H5打包微信小程序打包

一,uni - app 的支付功能

一、微信支付

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

记得先登录
在这里插入图片描述
点击
在这里插入图片描述

复制id
在这里插入图片描述

2、使用商户号和登录密码登录微信商户平台,进入 “账户中心” > “API安全” > “设置APIv2密钥” 设置API密钥(用于服务器生成订单),详情参考API证书及密钥

APP支付流程

本人未绑定商务平台账号,在这就不演示了
这一步不做也可以做出支付效果

3、在manifest.json文件“App模块配置”项的“Payment(支付)”下,勾选“微信支付”项

在这里插入图片描述

4、在 pages力新建页面 命名payment

4.1,新建页面

在这里插入图片描述

4.2,pages/payment.vue 代码

<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: '', //用户idloading: 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; //加载中// 获取openidlet openid = uni.getStorageSync('openid')if (!openid) {// 执行登录获取openidopenid = 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) => {uni.showModal({content: "支付失败,原因为: " + res.errMsg,showCancel: false})},// 移除loadingcomplete: () => {this.loading = false;}})},loginMpWeixin() {// 返回一个promisereturn 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, // 传入codeplatform: 'mp-weixin'}},success(res) {if (res.data.code !== 0) {reject(new Error('获取openid失败:', res.result.msg))return}// 成功后存储opendiuni.setStorageSync('openid', res.data.openid)// 返回openidresolve(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) {// 返回一个promisereturn 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><style></style>

启动模拟器,运行到模拟器,查看效果

效果图:

在这里插入图片描述

二、支付宝支付

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

2、打开项目的manifest.json文件,在“App模块配置”项的“Payment(支付)”下,勾选“支付宝支付”
在这里插入图片描述

代码同上,给你奉上:

<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: '', //用户idloading: 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; //加载中// 获取openidlet openid = uni.getStorageSync('openid')if (!openid) {// 执行登录获取openidopenid = 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) => {uni.showModal({content: "支付失败,原因为: " + res.errMsg,showCancel: false})},// 移除loadingcomplete: () => {this.loading = false;}})},loginMpWeixin() {// 返回一个promisereturn 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, // 传入codeplatform: 'mp-weixin'}},success(res) {if (res.data.code !== 0) {reject(new Error('获取openid失败:', res.result.msg))return}// 成功后存储opendiuni.setStorageSync('openid', res.data.openid)// 返回openidresolve(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) {// 返回一个promisereturn 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><style></style>

效果图同上,给你奉上:

在这里插入图片描述

功能实现
在这里插入图片描述

总结

1、支付的sdk如果可以尽量用uniapp提供的SDK 不然可能会导致支付调不成功(不要问我是怎么知道的,都是泪)
2、如果需要其他的可以参考uniapp提供的 其他支付

二,项目打包

1,APP打包(打包Android端)

1.1,首先在准备打包前配置好我们的APP相关配置,在manifest.json中。

在这里插入图片描述

这里需要注意的一点是:假如您的应用更改或添加了新功能,在重新打包发布的时候,请确保您的应用版本号不要相同

1.2,打包的证书别名、密码、证书文件是不可少的

在这里插入图片描述

证书的生成 步骤可以参考

1.3,安装jre环境

在这里插入图片描述

安装完成后,打开命令行(cmd),输入以下命令:

d:  
set PATH=%PATH%;"C:\Program Files\Java\jre1.8.0_201\bin"

第一行:切换工作目录到D:路径
第二行:将jre命令添加到临时环境变量中

1.4,生成签名证书

cmd窗口使用keytool -genkey命令生成证书:

keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore
  • testalias是证书别名,可修改为自己想设置的字符,建议使用英文字母和数字
  • test.keystore是证书文件名称,可修改为自己想设置的文件名称,也可以指定完整文件路径
  • 36500是证书的有效期,表示100年有效期,单位天,建议时间设置长一点,避免证书过期

回车后会提示:

Enter keystore password:  //输入证书文件密码,输入完成回车  
Re-enter new password:   //再次输入证书文件密码,输入完成回车  
What is your first and last name?  [Unknown]:  //输入名字和姓氏,输入完成回车  
What is the name of your organizational unit?  [Unknown]:  //输入组织单位名称,输入完成回车  
What is the name of your organization?  [Unknown]:  //输入组织名称,输入完成回车  
What is the name of your City or Locality?  [Unknown]:  //输入城市或区域名称,输入完成回车  
What is the name of your State or Province?  [Unknown]:  //输入省/市/自治区名称,输入完成回车  
What is the two-letter country code for this unit?  [Unknown]:  //输入国家/地区代号(两个字母),中国为CN,输入完成回车  
Is CN=XX, OU=XX, O=XX, L=XX, ST=XX, C=XX correct?  [no]:  //确认上面输入的内容是否正确,输入y,回车  Enter key password for <testalias>  (RETURN if same as keystore password):  //确认证书密码与证书文件密码一样(HBuilder|HBuilderX要求这两个密码一致),直接回车就可以

以上命令运行完成后就会生成证书,路径为“D:\test.keystore”。

查看证书信息

keytool -list -v -keystore test.keystore  
Enter keystore password: //输入密码,回车

会输出以下格式信息:

Keystore type: PKCS12    
Keystore provider: SUN    Your keystore contains 1 entry    Alias name: test    
Creation date: 2019-10-28    
Entry type: PrivateKeyEntry    
Certificate chain length: 1    
Certificate[1]:    
Owner: CN=Tester, OU=Test, O=Test, L=HD, ST=BJ, C=CN    
Issuer: CN=Tester, OU=Test, O=Test, L=HD, ST=BJ, C=CN    
Serial number: 7dd12840    
Valid from: Fri Jul 26 20:52:56 CST 2019 until: Sun Jul 02 20:52:56 CST 2119    
Certificate fingerprints:    MD5:  F9:F6:C8:1F:DB:AB:50:14:7D:6F:2C:4F:CE:E6:0A:A5    SHA1: BB:AC:E2:2F:97:3B:18:02:E7:D6:69:A3:7A:28:EF:D2:3F:A3:68:E7    SHA256: 24:11:7D:E7:36:12:BC:FE:AF:2A:6A:24:BD:04:4F:2E:33:E5:2D:41:96:5F:50:4D:74:17:7F:4F:E2:55:EB:26    
Signature algorithm name: SHA256withRSA    
Subject Public Key Algorithm: 2048-bit RSA key    
Version: 3

其中证书指纹信息(Certificate fingerprints):

  • MD5

    证书的MD5指纹信息(安全码MD5)

  • SHA1

    证书的SHA1指纹信息(安全码SHA1)

  • SHA256

    证书的SHA256指纹信息(安全码SHA245)

1.5,安卓签名获取工具

直接通过一个apk,获取安装到手机的第三方应用签名的apk包。
详情:

在这里插入图片描述
下载完成后发送至手机,安装完成后,输入我们的应用的包名,即可查询出来签名

在这里插入图片描述

1.6,点击打包,安心等待一会儿即可

在这里插入图片描述

2,H5 打包

2.1.,找到项目中 manifest.jsonH5 配置运行时的基础路径, 将路径修改为 相对路径(./

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

2.4.,点击发行后如图

在这里插入图片描述

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

在这里插入图片描述

2.6,E:/myuni/unpackage/dist/build/h5 运行,查看效果!

在这里插入图片描述

3,小程序打包(这里就用微信小程序了)

3.1,HbuilderX打包

选中项目-点击发行(U)- 小程序-(微信仅适用于uniapp)(W)
在这里插入图片描述

3.2,发行

填写微信小程序Appid

在这里插入图片描述

点击发行,项目会进行编译,等待编译完成,会提示前往小程序上传

在这里插入图片描述

前往小程序开发工具打开这个小程序

在这里插入图片描述

然后提示上传成功

在这里插入图片描述

3.3,打开小程序体验

在这里插入图片描述
这是你的第一个版本,点击蓝色的体验,会有一个二维码,用自己的账号体验,让别人体验的话,要先把对方加入到开发者中。
在这里插入图片描述
在这里插入图片描述

接下来就是根据提示,填写信息,然后等待审核,审核通过的话,就可以去微信上搜索你的小程序了。

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云数据库GaussDB(for Cassandra)揭秘:高性能低成本是什么样的体验?

在我们的日常理念中&#xff0c;追求性价比是最为常见的&#xff0c;但是你知道购买低配置还能享受高性能、低延时、超低价的数据库有哪些吗&#xff1f;今天我们就用数据说话&#xff0c;带你深入了解GaussDB(for Cassandra)挑战高性价比&#xff01; 众所周知&#xff0c;有…

操作系统实验5:信号量的实现与应用

写在最前的总结 下面的实验内容是在完整做完实验时候补充的&#xff0c;这里先把踩过的坑记录一下。 调试总结 先在Ubuntu上模拟生产者—消费者问题。这个实验分为两大部分&#xff0c;一个是实现信号量&#xff0c;另一个是验证信号量。对于第二个&#xff0c;建议先在Ubun…

【MySQL基础】MySQL常用的图形化管理工具有那些?

目录 一、为什么要使用MySQL图形化管理工具 原因 / 目的 / 作用 二、什么是DOS窗口? 三、常见的MySQL图形化管理工具有那些&#xff1f; 四、 常见几个MySQL图形工具的介绍 Navicat SQLyog MySQL Workbench DataGrip 五、Navicat图形工具的安装与使用 第一步&#x…

学习响应式布局

针对性内容 页面设计在不同设备的显示情况布局只会使用float定位&#xff0c;而不会掌握flex不能很好的使用rem作为设计单位掌握响应式布局、弹性等常见布局 学习内容 css中媒体查询的作用和使用方法flex弹性盒子的用法rem的作用和使用方法目录 针对性内容 学习内容 Media…

[iOS]App Store Connect添加银行卡时的CNAPS代码查询

App Store Connect 协议、税务和银行业务中&#xff0c;给付费APP类型添加银行卡需要填写CNAPS代码CNAPS代码&#xff0c;其实就是联行号。 联行号又称大额行号、银联号、银行行号或CNAPS号。 银行联行号查询

Java+JSP+MySQL基于SSM的会议交接平台的设计与实现-计算机毕业设计

项目介绍 随着社会竞争压力的不断加强&#xff0c;企事业单位内部的会议都在不断的增加&#xff0c;有效的会议可以提高企事业内部的沟通&#xff0c;更好的做出符合战略目标的决策&#xff0c;但是传统的会议交接有一定的问题存在&#xff0c;首先就是必须面对面进行传达&…

matlab图像的增强

1.灰度变换增强 &#xff08;1&#xff09;图像直方图 &#xff08;2&#xff09;图像直方图的均衡化 2.频域滤波增强 &#xff08;1&#xff09;低通滤波器 &#xff08;2&#xff09;高通滤波器 &#xff08;3&#xff09;同态滤波器 3.彩色增强 &#xff08;1&#xff09;真…

.vcxproj.filters 误删后如何重建

背景&#xff1a; 今天碰到这样一种情况&#xff0c;我在删除这个VS文件夹下的.user文件时&#xff0c;不小心把.vcxproj.filters也删除了。当然为什么删.user呢&#xff0c;因为换电脑了。 删除之后&#xff0c;我发现&#xff1a;我的解决方案目录变成这样了&#xff1a; 对…

[附源码]Python计算机毕业设计SSM考试排考系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

深入理解ThreadLocal源码

1. 预备知识&#xff1a;强软弱虚引用 在Java中有四种引用的类型&#xff1a;强引用、软引用、弱引用、虚引用。 设计这四种引用的目的是可以用程序员通过代码的方式来决定对象的生命周期&#xff0c;方便GC。 强引用 强引用是程序代码中最广泛使用的引用&#xff0c;如下&a…

CSDNtop1全栈接口测试教程 jmeter接口测试,接口自动化测试【2】

延时等待&#xff08;全局性&#xff09; api 测试⽤例执⾏速度⾮常快&#xff0c;某些时候因为业务的特性想让它延迟⼏秒执⾏&#xff0c;那么这个时候就使⽤延时等待。 参数化 可以理解为&#xff1a;⼀个测试点需要多次操作&#xff0c;并且每次操作数据都是不⼀样但测试步…

最好的天线基础知识!超实用 随时查询

天线作为无线电的发射和接收设备是影响信号强度和质量的重要设备,其在移动通信领域的重要性非常关键。通过对天线选型,天线安装,天线调整从而保障基站覆盖区域的信号强度与质量。对其的 掌握程度是网规与网优工程师的技能基本要求之一。下文重点说明天线要掌握哪些方面及其原理…

【软件安装】Linux中RabbitMQ的安装

① 本篇是基于Linux操作系统中的安装&#xff0c;故先准备一个干净的Linux操作系统。本文中所有的操作基于CentOS8进行安装演示&#xff1b; ② 接下来的演示文本中&#xff0c;红色字体为操作步骤&#xff0c;黑色字体为解释说明&#xff1b; ③ 确保Linux系统中已经安装好必…

【python】 int、float、double与16进制字符串的互相转换

import structdef intToHex(num): # int转16进制return hex(num)[2:].upper()def hexToInt(hexString): # 16进制转intreturn int(hexString, 16)def floatToHex(floatValue): # float转16进制return struct.pack(>f, floatValue).hex().upper()def hexToFloat(hexString…

Lactoferrin-PEG-MTX/Paclitaxel 乳铁蛋白-聚乙二醇-甲氨蝶呤/紫杉醇

产品名称&#xff1a;乳铁蛋白-聚乙二醇-甲氨蝶呤 英文名称&#xff1a;Lactoferrin-PEG-MTX 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体&#xff0c;取决于分子量 PEG分子量可选&#xff1a;350、550、750、1k、2k、…

全球领先飞瞳引擎™云服务全球两千+企业用户,集装箱识别集装箱箱况残损检测,正常箱号识别率99.98%以上,箱信息识别及铅封识别免费

全球领先飞瞳引擎™AI集装箱识别检测云服务全球两千企业用户&#xff0c;集装箱识别集装箱箱况残损检测&#xff0c;正常箱号识别率99.98%以上&#xff0c;箱信息识别及铅封识别免费。CIMCAI中集飞瞳是全球应用落地最广&#xff0c;规模最大&#xff0c;最先进的的港航人工智能…

操作系统学习笔记(Ⅳ):文件

目录 1 文件管理 1.1 初识文件管理 1.文件属性 2.文件数据组织 3.向上功能 1.2 文件逻辑结构 1.无结构文件 2.有结构文件 3.顺序文件 4.索引文件 5.索引顺序文件 1.3 文件目录 1.文件控制块 2.目录结构 3.索引结点 1.4 文件物理结构 1.连续分配 2.链接分配 …

自定义表单、自定义流程、自定义页面、自定义报表应用开发平台

真正的大师,永远都怀着一颗学徒的心&#xff01; 一、项目简介 Java开发框架&#xff0c;自定义表单、自定义页面、自定义流程、自定义报表应用开发平台 二、实现功能 支持系统文件在线管理 支持代码在线编辑 支持URL 路由 支持黑白名单 支持定时任务 支持在线监控 支持…

Charles抓取接口报文并修改各种参数信息调试

1.首先介绍Charles面板 图上顶部工具栏常用介绍&#xff1a; 1是清除按钮&#xff1a;点击后将清空左侧抓取的接口列表&#xff0c;如果接口太多&#xff0c;可以点击该按钮清空列表&#xff0c;重新发起请求&#xff0c;一目了然&#xff1b; 2.是停止按钮&#xff1a;点击该按…

Windows OpenGL ES 图像色调

目录 一.OpenGL ES 图像色调 1.原始图片2.效果演示 二.OpenGL ES 图像色调源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL E…