uniapp简单搞定支付

传统的开发支付需要前后端做很多工作,各种参数的处理,签名,秘钥的验证校验等,尤其是涉及到多种不同的平台支付,更是繁琐;而且以往的支付是由后端主导的,如果后端是个菜鸡,那么做这个支付会相当累人,所以为了避免这种障碍,前端只需要一个人就能搞定支付,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',//应用在对应支付平台的appIdmchId: '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-PLUSprovider: ‘wxpay’// App端此参数必填,可以通过uni.getProvider获取// #endif// #ifdef APP-PLUS || MP-ALIPAYorderInfo: res.result.orderInfo,// #endif...res.result.orderInfosuccess(){返回支付结果},fail(){}})}
})
复制代码

至此,支付的流程已经结束,付款结果会返回,如果需要查询订单,则需要调用unipayIns.orderQuery函数去查询了。

Tip1:

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

Tip2:

totalFee传入金额的单位是分,如果业务给的是元,则需要100转为分,注意一些比较特殊的数字,例如1.1,如果仅仅是100就ok的话,那么1.1这个数字支付会报错的,原因自己打印下就知道,所以最后传递的金额浮点数要注意;

Tip3:

订单号要注意,不能重复

Tip4:

云开发的支付方式基本上完全丢掉了后端的参与,但如果你的项目并非全完的云开发,业务本身还需要后端参与的话,支付完成的结果还是需要后端修改支付的状态的,所以就要跟后端约定好,支付通知地址接收到平台的通知时,就去修改业务的支付状态,避免出现支付已经完成,但支付的状态还未更改;再假如,你们的后端是个大菜鸡,你怕他的骚操作可能会接收不到平台服务器的支付结果,所以你可以继续调用查询订单的云函数,将支付结果通过接口返给后端,这样他就有了双重保证去修改业务的状态了!

uniapp简单搞定支付传统的开发支付需要前后端做很多工作,各种参数的处理,签名,秘钥的验证校验等,尤其是涉及到多种不同的平台支付,更是繁琐;而且以往的支付是由后端主导的,如果后端是个菜鸡,那么做这相关推荐

  1. uniapp简单搞定支付

    传统的开发支付需要前后端做很多工作,各种参数的处理,签名,秘钥的验证校验等,尤其是涉及到多种不同的平台支付,更是繁琐:而且以往的支付是由后端主导的,如果后端是个菜鸡,那么做这个支付会相当累人,所以为了 ...

  2. 微软专家教你,如何搞定树莓派 AI 服务开发

    本文来自作者 微软公开课 在 GitChat 上分享 「60分钟轻松搞定树莓派 AI 服务开发」 编辑 | Mc Jin 作者: 施炯,浙江万里学院物联网工程系主任,硕士研究生导师,<Windo ...

  3. 畅言评论的版权及样式如何修改CSS一步简单搞定

    16年9月份差不多,多说就已经开始各种抽风了,让鸡哥这种小老百姓是属实受不了,然而去多说官网反馈并没什么卵用,神奇的是我的反馈帖子只有在我登陆的时候可以看到,一旦退出登陆就消失了,..这种单机模式多说 ...

  4. 机智云无需代码就能搞定IoT小程序开发和管理

    基于机智云Aiot开发平台的新版开发者中心,无需代码就能搞定IoT小程序开发和管理.在信息技术不断更新升级的今天,与其紧密结合的物联网技术已经深入千家万户,给予人们更好的生活体验,也在不断的优化甚至是 ...

  5. 大前端时代搞定PC/Mac端开发,我有绝招

    如果你是一位前端开发工程师,对"跨平台"一词应该不会感到陌生.像常见的前端框架:比如React.Vue.Angular,它们可以做网页端,也可以做移动端,但很少能做到跨PC.Mac ...

  6. 不花一分钱,七个小招式简单搞定新车异味

    新车提回来味道较大,一些刺鼻的气味让人觉得头晕恶心,如果在车里呆久了,这些异味会使人头晕目眩.精神恍惚最重要的是还让人无法防备.那么有哪些办法可以快速,方便,经济的去除味道呢?这次有车大师来跟大家说说 ...

  7. 100代码搞定C语言游戏开发,编程原来如此简单

    序言 虽然说学完了C语言入门,但是实际能力还是停留在一个很低的水平,基本上就是套几个for循环,暴力解一下排列组合问题的水平.这次的编写控制台贪吃蛇程序对我来说是一个不小的挑战. 文本版的贪吃蛇用的东 ...

  8. 操作系统之(一篇文章让你简单搞定:什么是进程和线程)

    文章目录 1.为什么引入进程 2.进程究竟是什么?进程的定义和属性: 3.进程的状态和转换 4.什么是进程上下文 5.进程的控制和管理 6.为什么要引入线程 7.线程的概念 8.引入线程的好处 9.进 ...

  9. 60分钟轻松搞定树莓派 AI 服务开发

    目前,物联网.人工智能已经深入到医疗.家居.教育等多个领域,正在极大改变人们的日常生活.树莓派能够运行 Raspbian.Windows IoT Core 等操作系统,受众多物联网技术爱好者的欢迎.微 ...

最新文章

  1. 9个技巧让你的PyTorch模型训练变得飞快!
  2. 声明了变量并赋了初始值,但在VS中报当前上下文中不存在名称“ XXX”的错误...
  3. python 矩阵点乘_python相乘矩阵
  4. NumPy学习笔记(一)
  5. apache-tomcat-6.0.39的配置
  6. 用纸筒做机器人_幼儿园简单手工:纸盒子回收利用做机器人(步骤图解)
  7. 【ARM】Tiny4412裸板编程之MMU(段1M)
  8. C++primer第八章 IO库 8.2 文件输入输出
  9. openlayer 图层上下_OpenLayers 3 的图层体系结构
  10. php include 导航栏,PHP全栈开发(八):CSS Ⅹ 导航栏制作
  11. C#高级编程之C#基础知识
  12. 做生意的“四大方向”让你看清财富的本质
  13. 细胞制备流程图_体细胞核移植过程中,注入“供体细胞”还是“供体细胞核”?...
  14. 解决服务器发回了不可路由的地址。使用服务器地址代替的问题
  15. Java中的for循环
  16. 画质最好单机linux游戏,画质最好单机手游推荐 画质超高单机手游下载
  17. 第一天python学习打卡
  18. 数商云采购管理系统:阳光采购,高效降本
  19. 小学语文计算机的运用计划,语文计算机应用教学计划
  20. qt creator使用vcpkg

热门文章

  1. 全国计算机一级的分类,有关全国计算机一级
  2. Win10 开机突然蓝屏错误代码0xc0000001安全模式也进不了,不用重装系统怎么修复?(已解决)八个解决参考方案
  3. keydown、input、keyup
  4. alias实现VREP/Coppeliasim等软件在任意路径以自定义名称启动
  5. Letter to a newborn son
  6. 验证码—基本功能实现02_点击重新获取验证码
  7. 【数据聚类】第五章第一节:基于网格的聚类算法概述
  8. RAP2本地开发环境部署
  9. linux C 基于事件回调的epoll反应堆模型
  10. pytorch 计算 kl散度 F.kl_div()