支付类

第一部分:

a.在付款页面中插入 支付元素;并参考元素使用说明;

b.如果在用户付款成功之后需要有额外动作时(如增加记录/修改状态,判断实际付款金额是否正确等等),需要完成一个job文件;

c.资源访问页(受保护的资源)插入是否付款代码段. 该代码段异常分支内处理付款不成功的操作.

 

第二部分:

a.如果需要查询某些资源的支付情况,插入付款记录查询代码段来获取支付信息;

b.如果需要重新执行job,可以插入基于专款专用的job重试功能代码段,来重新执行job;

 

附:job文件中所需要的代码,可以现在wide--代码编辑界面--插入所需要的代码段,验证通过后,将这些代码段整体拷贝到job文件中。

 

支付具体操作

一、支付列表

  • 可以使用产品给出的支付列表
  • 也可以调用视口:/v/omnipay/use/gateway/query.json 获取支付列表
  • 权限: 登陆用户
  • 输出信息:
  •         {
      "success": true,
      "_runCommand": [
        {
          "command": "updatelv",
          "params": [
            {
              "gatewaylist": [
                {
                  "gateway": "alipayexpress",
                  "name": "支付宝即时到账"
                },
                {
                  "gateway": "wechatpaynative",
                  "name": "微信扫码支付"
                },
                {
                  "gateway": "unionexpress",
                  "name": "网银支付接口"
                }
              ]
            }
          ]
        }
      ]
    }
          

     

    二、调用视口并传参数

  • 调用视口:/v/omnipay/use/cpurchase.json
  • 权限: 登陆用户
  • 输入参数:
  • 必填:
  • gateway 支付方式代号,由获取可用支付方式接口获得:
  • 支付宝即时到账: alipayexpress
  • 微信扫码支付: wechatpaynative
  • 网银支付接口: unionexpress
  • wechatpayjs
  • alipaybank
  • paypalexpress
  • 小程序支付:wechatpayminip (仅小程序中)
  • totalfee 支付总金额 支付总金额必须为大于0的精确到小数点后2位数字.单位为人民币 "元"
  • 选填:
  • transactionID: 资源id,形式必须是类似:18a272c0bc4a11e6a76cb1d42537b8a7. 另外这个参数有特殊作用. 如果传入本参数,会立即扣款.在job文件中只提供这一个参数,用来处理其他逻辑,可以是订单的_id,也可以是购买多个商品时共同拥有的字段。
  • jobid: 值为job文件名(没有后缀),如果传入,则用户付款成功后启动jobid对应的job.可以在这个job文件中处理相关逻辑.
  • subject: 订单名
  • body: 订单详情
  • returnurl: 支付成功后跳转地址.如果gateway=alipayexpress,这个值为必填.
  • cancelurl: 支付成功后跳转地址.如果gateway=paypalexpress,这个值为必填.
  • wxopenid: 微信用户的openid 如果gateway=wechatpayjs,这个值为必填.
  • endtime: 如果transactionID不为空,则这个值的时间点为transactionID所代表资源的有效期
  • 小提示:
  • gateway可以通过绑定数据编程和单选实现
  • totalfee和transactionID可以通过后端代码返回
  • jobid和returnurl可以写在“逻辑”→“提交数据”→“默认提交数据”上
  • 输出信息:
  • 如果 gateway=alipayexpress
  • 自动跳转至支付宝页面,用户付款成功后自动跳回 returnurl.
  • 如果 gateway=paypalexpress
  • 自动跳转至支付宝页面,用户付款成功后自动跳回 returnurl.
  • 如果 gateway=wechatpaynative
  • 返回符合数据绑定格式的数据示例如下:
  •        {
      "_runCommand": [
        {
          "command": "updatelv",
          "params": [
            {
              "paymentid": "1374513602",// 微信生成的订单号
              "prepayid": "wx201611091433355d48f63c700075715216", // 预支付id
              "getCodeUrl": "weixin://wxpay/bizpayurl?pr=XkKrJ4D", // 二维码信息
              "returnmsg": "OK"
            }
          ]
        }
      ],
      "success": true // 是否成功
    }
          

     

    三、提交参数

    注意:

    1.如果使用的是支付模块的app.html页面,页面会自动提交所需的参数,使用者需要在页面构建页面层数据变量作为参数。

    2.小程序支付是完全内置的支付方式且仅在小程序中生效,在后台配置后在小程序中会自动调用小程序支付且屏蔽其他支付,在小程序中仅支持小程序支付且无法配置

     

    四、完成job文件

  • 1.检查这个目录是否存在{DOMAIN}/lib/jobs/. 如果没有则手动创建
  • 2.新建文件 {jobType}.js 文件. 注意 jobType就是上面提到的jobid所对应的值
  • 3.粘贴基本代码模板到 {jobType}.js 中
  •     (function() {
      module.exports.exec = function(req, data) {
        var finish_data = {};
        var tmp_data = {};
        var inputs = data.data;
        return when.pipeline([
          /*INSBEGIN:JOBPROCESS*/
          /*INSEND:JOBPROCESS*/
          function(){
            var default_data = /*INSBEGIN:MARK*/ {} /*INSEND:MARK*/ ;
            return _.extend(default_data, finish_data);
          }
        ]);
      };
    })();
        
  • 4.新建一个任意名称的后端视口,并在其中完成job中需要处理的逻辑(插入相关代码段),可以在inputs中获取以下参数
  • inputs.record.md_amount 实际支付金额
  • inputs.record.md_iid 请求发起付款时传入的 transactionID
  • inputs.record.md_uid 请求发起付款时的 用户ID
  • 5.拷贝所有所插入的代码段到 /*INSBEGIN:JOBPROCESS*/ 代码段 /*INSEND:JOBPROCESS*/ 代码段 处
  • 6.保存 {jobType}.js文件. 立即发布--只更新静态资源
  • 注意: 当支付完成后,需要处理额外逻辑(可能存在业务逻辑复杂, 分多种情况),可以通过创建多个业务逻辑 (不同的业务逻辑可交给不同的组员实现),然后在job中通过"调用lib"代码段来将逻辑拆分开,从而降低功能实现难度。

    五、常见错误处理

      

    1. column "md_state" of relation "expenditures" does not exist 模块未更新,expenditures表中没有md_state属性,重新加入支付模块。提交model.js后,清空数据库后,更新数据库配置