• uni-app的支付与打包上传


    支付app的支付(支付宝付)

    准备工作

    1.支付厂商获取id

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

    2.微信:微信支付平台
    https://pay.weixin.qq.com/
    在这里插入图片描述3、打包 manifest.json app模块配置 payment支付
    可以选择支付宝支付或者其他平台的支付

    在这里插入图片描述

    app的支付步骤

    - 01 获取支付厂商:uni.getProvider()
    uni.getProvider({service: "payment"})
    - 02 用户发起支付
    requestPayment(item,index){}
    - 03 获取订单信息
    getOrderInfo(item.id)
    - 04 发起支付api

            uni.requestPayment({
               provider:item.id, //提供商
               orderInfo: orderInfo, //订单信息
            })
    
    • 1
    • 2
    • 3
    • 4

    App支付宝支付完整代码

    - template

    <template>
    	<view>
    		<view class="title">支付</view>
    	
    		<view>
    			支付金额:<input :value="price" maxlength="4" @input="priceChange" placeholder="请求输入支付金额" />
    			<view>
    				<!-- 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    - script

    <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
    							}
    						}
    					})
    				}
    			})
    		},
     
    			// 实现支付
    			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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102

    小程序的支付

    - 01 用户的点击 发起支付
    async weixinPay()
    - 02 获取openid

     本地存储 ||loginMpWeixin
    
         //获取code
         uni.login({})
          
         //获取openid
         uni.request({})
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    - 03 获取订单信息

     this.getOrderInfo('wxpay')
    
    • 1

    - 04 根据订单信息发起支付

        uni.requestPayment({
                            ...
        orderInfo})
    
    • 1
    • 2
    • 3

    微信支付完整代码

    - template

    <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    - script

    <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188

    打包html代码上传服务

    • 配置相对地址=>manifest.json=>web配置
      • 运行的基础路径为 ./
    • 发行=>发到网站-PC
    • 通过flashFXP工具上传服务器:unpackage>dist>build>H5

    打包微信小程序上传

    • 01 配置id
      manifest.json 微信小程序配置
    • 02 单击发行
      发行=>小程序微信
    • 03 进入小程序上传
      小程序右上角上传(先测试,真机测试)
    • 04 微信提交审核mp.weixin.qq.com
    • 05 如果有网络请求需要配置域名且必须是https开头
    • 开发管理
      • 服务器设置
      • 服务器域名
    • request合法域名
      uni.request,wx.request 请求的域名必须事先定义好
    • 如果有上传也要配置上传的域名
      uploadFile合法域名
    • 配置下载域名
      downloadFile合法域名

    如果想搞钱用户累积量达到1000

    1. 累计用户操作1000 可以称为流量主
    开通广告(视频激励广告最挣钱)

    • 定义
      let rewardedVideoAd = null
      部分代码
      在这里插入图片描述在这里插入图片描述

    App打包上传应用商店

    • 应用商店
      • 华为
      • opple
      • vivo
      • 小米
    • 现在只有华为可以个人上传其他都必须是公司
    • 个人上传
      需要app的版权证明(600-1500)
    • 最难的是:应付国家的隐私条例和应用商店的隐私审核

    打包上传选项配置

    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    打包配置

    在这里插入图片描述

    解决谷歌浏览器安全策略问题

    • 将谷歌浏览器进行桌面备份
    • 在目标地址结尾添加--disable-web-security --user-data-dir=C:\mydir
    • 示例
    • "C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir=C:\mydir
      在这里插入图片描述
  • 相关阅读:
    基于java的仓库管理系统
    C. Swap Game(简单博弈)
    VBA_MF系列技术资料1-202
    CSS3基础:字体和文本调整
    『现学现忘』Docker基础 — 28、Docker容器数据卷介绍
    python读取json文件并转换成list存为json,解决存取json中文乱码问题
    通过ES-Hadoop实现Hive读写Elasticsearch数据
    力扣第 387 场周赛第四题 将元素分配到两个数组中 II 二分查找,离散化,线段树
    【RocketMQ】事务的实现原理
    Leetcode 3286. Find a Safe Walk Through a Grid
  • 原文地址:https://blog.csdn.net/m0_59642141/article/details/128176002