传统的开发领取须要前后端做很多工作,各种参数的解决,签名,秘钥的验证校验等,尤其是波及到多种不同的平台领取,更是繁琐;而且以往的领取是由后端主导的,如果后端是个菜鸡,那么做这个领取会相当累人,所以为了防止这种阻碍,前端只须要一个人就能搞定领取,uniapp的云开发提供了一种形式,一套代码兼容不同的领取形式,小程序,App,H5等一网打尽,最次要还收费。
上面就介绍下这种无脑开发的领取形式有多简略,但前提是应用的框架要可能创立uniCloud云空间,否则下列的做法可能不适宜!

第一步:我的项目创立云空间;

在Hbuilderx中抉择我的项目,右键创立云开发环境,目前只有腾讯云和阿里云,阿里云是收费的,如果是仅仅做领取,阿里云是足够的;我的项目中如果曾经存在云空间,则不必创立;创立之后,会在cloundfunctions文件夹中含有common目录和database,common是搁置公共模块的目录,database是数据库相干的目录,只做领取的话,不波及到database目录;

第二步:引入uni-pay插件:

能够通过在插件市场引入或者npm的形式下载,当初次要说的是插件市场引入,引入之后,会在common目录下引入uni-pay模块,外面默认有index.js和package.json文件;之后再上传公共模块到服务空间;

第三步:云函数的创立及编写:

云函数的创立,在uniCloud/cloudfunctions中右键创立云函数,会默认生成index.js文件,是该云函数的入口文件;留神:云函数的创立同名,则会笼罩;

如果该云函数依赖某个公共模块的函数,须要装置该公共模块函数的依赖;如果uni-pay是通过uni_modules引入的,这时在云函数目录右键“治理公共模块依赖”,须要哪个公共模块,则抉择那个;依赖装置之后,在index.js中引入uni-pay;如果uni-pay是通过非uni_modules装置的,则须要先给该函数通过npm init -y生成package.json文件,再在该云函数中通过终端,执行npm install '须要引入的云函数模块门路';

云函数的编写,以App的微信领取为例:

先要引入uni-pay; const unipay = require('unipay');再初始化unipay实例const unipayIns = unipay.initWeixin({  appId: 'your appId',//利用在对应领取平台的appId  mchId: 'your mchId',//商户号  key: 'you parterner key',//领取秘钥  pfx: fs.readFileSync('/path/to/your/pfxfile'), // p12文件门路,应用微信退款时须要,须要留神的是阿里云目前不反对以相对路径读取文件,请应用绝对路径的模式})

领取的参数,以app 的微信领取为例

exports.main = async function (event,context) { //event是客户端传过来的参数    let orderInfo = await unipayIns.getOrderInfo({         body: '商品形容',        outTradeNo: '商户订单号',        totalFee: 1, // 金额,单位分        tradeType:'APP'        notifyUrl: 'https://xxx.xx' // 领取后果告诉地址    })    return {        orderInfo    }}

第四步:客户端调用云函数

uniCloud.callFunction({    name: 'getOrderInfo', //这个name是须要调用的云函数名称    data:{},//领取所须要的参数,用于向云函数传递    success(res) {        uni.requestPayment({      // #ifdef APP-PLUS      provider: ‘wxpay’// App端此参数必填,能够通过uni.getProvider获取      // #endif      // #ifdef MP-WEIXIN      ...res.result.orderInfo,      // #endif      // #ifdef APP-PLUS || MP-ALIPAY      orderInfo: res.result.orderInfo,      // #endif      ...res.result.orderInfo     success(){          返回领取后果    },    fail(){}   })  }})

至此,领取的流程曾经完结,付款后果会返回,如果须要查问订单,则须要调用unipayIns.orderQuery函数去查问了。

Tip1:我的项目如果须要微信和支付宝两种领取形式甚至还要加上小程序的领取,那么能够将不同类型的领取形式封装到模块中,再在每个云函数中进行初始化操作;形式是在云函数的common下,新建公共模块,命名为config,在该文件的index.js中别离配置不同领取形式对应的参数,再通过须要调用的云函数装置依赖,并引入,形式与引入uni-pay的形式一样;须要留神的是在客户端调用该函数时,须要用参数标识好不同的领取形式,这样在调用的云函数中就能解决不同的参数。

Tip2:totalFee传入金额的单位是分,如果业务给的是元,则须要100转为分,留神一些比拟非凡的数字,例如1.1,如果仅仅是100就ok的话,那么1.1这个数字领取会报错的,起因本人打印下就晓得,所以最初传递的金额浮点数要留神;

Tip3: 订单号要留神,不能反复。

Tip4: 云开发的领取形式基本上齐全丢掉了后端的参加,但如果你的我的项目并非全完的云开发,业务自身还须要后端参加的话,领取实现的后果还是须要后端批改领取的状态的,所以就要跟后端约定好,领取告诉地址接管到平台的告诉时,就去批改业务的领取状态,避免出现领取曾经实现,但领取的状态还未更改;再如果,你们的后端是个大菜鸡,你怕他的骚操作可能会接管不到平台服务器的领取后果,所以你能够持续调用查问订单的云函数,将领取后果通过接口返给后端,这样他就有了双重保障去批改业务的状态了!