订单兑换成功/失败消息的接收接口

接口说明

该接口由开发者开放给兑吧

不管兑换行为最终成功还是失败,兑吧都会向开发者发出通知,汇报兑换结果。

开发者收到通知后,请以兑吧订单号 orderNum 为准进行处理,不要以开发者订单号bizId进行处理。原因详见上一章节的:扣积分超时处理方式

如果兑换成功,开发者在系统内标记此订单为成功状态即可。如果兑换失败,开发者需要将该订单标记为失败,并将之前扣积分接口预扣的积分返还给用户。

无论接受到的结果如何,只要开发者收到该请求,请返回 ok 字符串(不含双引号),否则兑吧将进行重复通知,直到开发者收到或者24小时内最多重复 8 次。

请求参数(Get请求方式传参)

签名规则可参考文档MD5签名规则。对接过程中出现签名问题可通过签名排查工具进行自排查,其他问题,可参考文档常见问题处理

参数 是否必须 参数类型 限制长度 参数说明
appKey yes string 255 接口appKey,应用的唯一标识码
timestamp yes string 20 1970-01-01开始的时间戳,毫秒。
uid yes string 255 用户唯一标识,唯一且不可变
success yes boolean 兑换是否成功,状态是true和false
errorMessage no string 255 出错原因(带中文,请用utf-8进行解码)
orderNum yes string 255 兑吧订单号
bizId no string 255 开发者的订单号
sign yes string 255 签名,详见签名规则

响应参数:

开发者服务器端收到通知并处理完成后,请返回纯文本的 ok 字符串,两边不带空格,忽略大小写,兑吧在验证到响应为 ok 后会标记通知成功。

如果响应为非 ok 字符串,兑吧会在24小时内最多重试 8 次通知。
通知时间间隔为:2m、10m、10m、1h、2h、6h、15h。

注:出于网络异常的可能性,兑吧可能会对开发者进行重复通知,开发者务必确保一笔订单不进行重复处理,否则将产生严重bug,详细原因参考下述:重复通知处理

重复通知处理

由于网络具有不稳定的特性,当兑吧向开发者服务器发送成功/失败通知时,有可能存在兑吧发送了通知,开发者收到了通知并进行了处理。

若此时出现网络故障,开发者响应兑吧失败,兑吧没有收到开发者的响应,兑吧会认为开发者没有收到通知,于是进行重复通知。

此时开发者收到通知后,务必先确认此订单是否已经处理过。如果已经处理过,则忽略此通知,并响应ok。 如果此时开发者忽略订单是否已经被处理过,而直接进行处理,将导致开发者反复向用户返还积分,导致损失!

请勿限制通知等待时长

有部分订单:如实物类订单,需等待发货之后才会确认订单成功,此类订单可能会隔比较长时间才发订单结果通知。如果限制了通知等待时长会导致部分订单接收不到结果。


代码示例

java

点击下载(java开发包)

/*
*  兑换订单的结果通知请求的解析方法
*  当兑换订单成功时,兑吧会发送请求通知开发者,兑换订单的结果为成功或者失败,如果为失败,开发者需要将积分返还给用户
*/
CreditTool tool=new CreditTool(appKey, appSecret);

try {
    CreditNotifyParams params= tool.parseCreditNotify(request);//利用tool来解析这个请求
    String orderNum=params.getOrderNum();
    if(params.isSuccess()){
        //兑换成功
    }else{
        //兑换失败,根据orderNum,对用户的金币进行返还,回滚操作
    }
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

php

开发工具包 :点击打开

/*
*  兑换订单的结果通知请求的解析方法
*  当兑换订单成功时,兑吧会发送请求通知开发者,兑换订单的结果为成功或者失败,如果为失败,开发者需要将积分返还给用户
*/
function parseCreditNotify($appKey,$appSecret,$request_array){
    if($request_array["appKey"] != $appKey){
        throw new Exception("appKey not match");
    }
    if($request_array["timestamp"] == null ){
        throw new Exception("timestamp can't be null");
    }
    $verify=signVerify($appSecret,$request_array);
    if(!$verify){
        throw new Exception("sign verify fail");
    }
    $ret=array("success"=>$request_array["success"],"errorMessage"=>$request_array["errorMessage"],
        "uid"=>$request_array["uid"],"bizId"=>$request_array["bizId"]);
    return $ret;
}

.net

开发工具包:点击打开

/*
*  兑换订单的结果通知请求的解析方法
*  当兑换订单成功时,兑吧会发送请求通知开发者,兑换订单的结果为成功或者失败,如果为失败,开发者需要将积分返还给用户
*/
function parseCreditNotify(string appKey,string appSecret,HttpRequest request)
{
    if(!request.Params["appKey"].Equals(appKey)){
        throw new Exception("appKey not match");
    }
    if(request.Params["timestamp"] == null ){
        throw new Exception("timestamp can't be null");
    }
    Hashtable hshTable = duiba.GetUrlParams(request);

    bool verify=duiba.SignVerify(appSecret,hshTable);
    if(!verify){
        throw new Exception("sign verify fail");
    }
    return hshTable;
}

对接中常见问题处理

在接口解析过程中会遇到一些常见问题,常见问题和解决思路 详见常见问题解决

results matching ""

    No results matching ""