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