关于uni-app:uniapp四步搞定支付

76次阅读

共计 2457 个字符,预计需要花费 7 分钟才能阅读完成。

传统的开发领取须要前后端做很多工作,各种参数的解决,签名,秘钥的验证校验等,尤其是波及到多种不同的平台领取,更是繁琐;而且以往的领取是由后端主导的,如果后端是个菜鸡,那么做这个领取会相当累人,所以为了防止这种阻碍,前端只须要一个人就能搞定领取,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: 云开发的领取形式基本上齐全丢掉了后端的参加,但如果你的我的项目并非全完的云开发,业务自身还须要后端参加的话,领取实现的后果还是须要后端批改领取的状态的,所以就要跟后端约定好,领取告诉地址接管到平台的告诉时,就去批改业务的领取状态,避免出现领取曾经实现,但领取的状态还未更改;再如果,你们的后端是个大菜鸡,你怕他的骚操作可能会接管不到平台服务器的领取后果,所以你能够持续调用查问订单的云函数,将领取后果通过接口返给后端,这样他就有了双重保障去批改业务的状态了!

正文完
 0