退款流程

 

目前仅支持了退货后退款

流程:用户申请退货-->商家或管理员收到申请退货单并同意-->商家或管理员发起线上退款至用户支付此订单时的账户-->用户退款成功之后需要有额外动作时(如增加记录/修改状态),调用job

 

 

线上退款的具体操作:

        1.首先在线上退款操作的视口中添加退货代码段,代码段中涉及的参数:

"totalfee": "1.12",//本次退款金额,订单单次退全部款项则为支付总金额
"incomeid": "fe8e6100075111e986869f4dfa6f577b",//商户系统中的订单ID或资源ID
"sourceid": "0554b160075211e986869f4dfa6f577b",//退款单ID,这个ID可以不同于订单ID,用于区分单个订单有多个退款时,此时每个退款需要一个独立的ID
"uid": "08eaa960075211e986869f4dfa6f577b",//申请退款人的用户ID,一般规则是用户本人,管理员或商家可为其他用户发起。请自行验证
   

            示例代码:

 

     /*INSBEGIN:CUSTOM*/
      function() {
        return req.import("omnipay/pay");
      },
      function(omnipay) {
  
        var order = {
          "totalfee": "0.01", //退款金额
          "incomeid": inputs.zhifuid, //本模块的订单ID
          "sourceid": inputs.tuikuanid, //退款单ID,这个ID可以不同于订单ID,用于区分单个订单有多个退款时,此时每个退款需要一个独立的ID
          "uid": req.user.uid, //申请退款人ID
        };
        return omnipay.returnGoods(req, order, {
          confirmed: true
        });
      },
      
      /*INSEND:CUSTOM*/


        注意:  returnGoods函数接受的参数中opt如果有confirmed则为直接确认退货。
        一般用户发起调用returnGoods(req,order,{});,这时仅会创建一条记录。商家确认后再次调用returnGoods(req,order,{confirmed:true});这时会将记录变更为同意退货。
        不需要用户同意的退货申请则直接调用returnGoods(req,order,{confirmed:true});。请务必确认自己项目的实现逻辑。
        退货 returnGoods 返回值,成功时返回创建的incomes表,失败时返回success为false,returnmsg为错误原因。注意这里的success没有true。以success===false 判断返回值

        2.在退款操作的视口中添加退款代码段, 退款代码段在退货代码段返回值success不为false时执行,自行添加判断,退款代码段涉及的参数:

        

"gateway": "",//支付网关,非必要参数
"totalfee": "",//退款费用,非必要参数,以退货时创建的退款单为准,无须填写
"transactionID": "0554b160075211e986869f4dfa6f577b",//退货时创建的退款单ID,多次退款请区分开不能使用一个退款单id
"subject": "待发货退款",//主题,根据项目具体场景命名
"body": "商品选错",//说明,退款原因说明
"wxopenid": "",//微信支付时提供的openid,支付宝无须填写
"jobid": "daifahuo",//jobid为退款成功后需要调用的job文件的文件名(daifahuo.js),无须文件后缀格式
"returnurl": "",//跳转地址
  

 

             参考代码:

      /*INSBEGIN:CUSTOM*/
      function() {
        return req.import("omnipay/pay");
      },
     
      function(omnipay) {

        var worder = {

          "transactionID": inputs.tuikuanid, //退货时创建的退款单ID
          "subject": "待发货退款", //主题,根据项目具体场景命名
          "body": "分次退款测试", //说明,退款原因说明

        };
        return omnipay.refund(req, worder, {});
      },

      /*INSEND:CUSTOM*/

 

            退款完成需要returnurl等参数才能跳转,请自行设置,这里仅是参考。进行多次退款时务必将退款单id区分,每次使用不同的退款单id。系统中自行维护其关系。另外支付宝和微信支持的最小金额为0.01元,多次退款时务必支付大于0.01元

 

job文件

      退款成功有额外后有额外操作时需要完成 job文件-- 请参考如何手动完成job文件