uni-app实现APP微信支付、支付宝支付!讲解

第一步:设置微信支付宝支付!
在这里插入图片描述
第二步:上代支付代码:

/* 参数判断完毕后点击支付,发起支付 */
			getbuygood() {
   
				let that = this
				let data = {
   
					buynum: 1, //传入后台的参数
					goods_id: that.coinList.goods_id, //传入后台的参数
					phone:that.form.phone,传入后台的参数
					pay_type: that.curre //支付方式 传入后台的参数
				}
				uni.getProvider({
   
					service: 'payment', //获取服务供应商
					success: (res) => {
   
						console.log(res.service) //服务类型:payment
						console.log(res.provider) //不同服务类型下可能的取值:["alipay","wxpay"]
						/*调用后台的接口!得到返回的数据*/
						this.$http.buygood(data).then(function(ress){
   
							console.log(ress)
							/*后台返回的数据   里面要确定是   wxpay    alipay  微信还是支付宝*/
							let provider = ress.data.pay_type == 20 ? 'wxpay' : 'alipay'
							let orderInfo = ress.data.payment
							console.log(provider)
							/*如果是支付宝支付   则直接传入后台的数据 进行支付
							 *如果是微信支付。就需要进行二次签名验证
							*/
							if (provider == "wxpay") {
   
								orderInfo = that.getPayInfo(ress.data.payment)
							}
							console.log(provider)
							uni.requestPayment({
   
								provider: provider, //wxpay微信 alipay支付宝
								orderInfo: orderInfo, //订单数据 后台返回的数据  
								success: function(resss) {
   
									console.log('success:' + JSON.stringify(resss));
									uni.showToast({
   
										title: '支付成功'
									})
								},
								// 参数有问题则抛出错误
								fail: function(err) {
   
									console.log(err)
									console.log('fail:' + JSON.stringify(err));
									uni.showToast({
   
										title: '支付失败'
									})
								},
							})
						}, error => {
   
							console.log(error)
						})
					}
				})
			},
			getPayInfo(orderInfo) {
   
				let res = orderInfo, // 后台返回的统一下单数据
					key = "此处为加密的KEY,问后台要", // 加密Key,微信支付填写的key(后台提供)
					payInfo = {
   
						appid: res.appid,
						noncestr: res.noncestr,
						package: res.package,
						partnerid: res.partnerid,
						prepayid: res.prepayid,
						timestamp: Number(res.timestamp),
					}
				// 键值对按照ASCII码从小到大排序生成类似:appid=xxx&body=xx&device_info=1000
				let keyValueStr = this.mapObjToKeyValue(payInfo, true);
				// 插入加密Key到最后
				let strSignTemp = `${
    keyValueStr}&key=${
    key}`;
				// 需要引入md5.js源码,
				let sign = md5(strSignTemp).toUpperCase().substr(0, 32);
				console.log(sign) // 可以去微信支付文档做校验
				payInfo.sign = sign;
				// 返回字符串给uniapp调起支付用
				return JSON.stringify(payInfo);
			},
			/*
			 * 根据object生成key value字符串
			 * @params obj: any 要map的对象
			 * @params isSort: boolean 是否根据ASCII字典排序
			 */
			mapObjToKeyValue(obj, isSort = false) {
   
				let keys = Object.keys(obj);
				let str = "";
			
				if (isSort) keys.sort();
				keys.forEach(key => {
   
					if (obj.hasOwnProperty(key)) {
   
						str += `${
    key}=${
    obj[key]}&`;
					}
				});
				return str.replace(/&$/, "");
			},

第三步:测试如果提示,签名不一致、或者包名不一致。

  • 检查自己的基座、是否用的自定义的基座、因为只有之定义的基座,用的 appid 和 密钥 是你自己的密钥 运行–运行到手机模拟器 – 基座选择
    打包签名的时候一定要跟公众平台的匹配! 尽量的用 java jdk 1.8_201 生成证书 给版本里面的 md5内容 去掉:和大写改小写进行公众平台的签名

配套MD5.js 一定要引入在支付里面去因为微信需要进行二次签名 mport md5 from ‘…/…/utils/md5.js’

/*
 * JavaScript MD5
 * https://github.com/blueimp/JavaScript-MD5
 *
 * Copyright 2011, Sebastian Tschan
 * https://blueimp.net
 *
 * Licensed under the MIT license:
 * https://opensource.org/licenses/MIT
 *
 * Based on
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */

/* global define */

;(function ($) {
   
  'use strict'

  /*
  * Add integers, wrapping at 2^32. This uses 16-bit operations internally
  * to work around bugs in some JS interpreters.
  */
  function safeAdd (x, y) {
   
    var lsw = (x & 0xffff) + (y & 0xffff)
    var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
    return (msw << 16) | (lsw & 0xffff)
  }

  /*
  * Bitwise rotate a 32-bit number to the left.
  */
  function bitRotateLeft (num, cnt) {
   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值