支付结果通知

OPPO 小游戏平台会将支付结果通过 CP 提供的 callBackUrl 进行通知,通知失败时,会有重试机制,最大重试 28 次。

1、接口要求:

1)HTTP Method: POST

2)Content-Type: application/x-www-form-urlencoded

3)传递参数:

参数名 类型 长度限制 说明
notifyId string 50 回调通知 ID(该值使用系统为这次支付生成的订单号)
partnerOrder string 100 CP 订单号
productName string 40 商品名称
productDesc string 120 商品描述
price int 商品价格(以分为单位)
count int 商品数量(一般为 1)
attach string 200 请求统一下单接口时上传的附加参数
paymentWay string 支付方式
payResult string 支付结果
sign string 签名

2、验证接口签名步骤:

1)利用回调的参数生成 baseString,方法如下(参数名按 ASCII 码从小到大排序(字典序)):

private static String getContentString(){
    TreeMap<String, String> treeMap = new TreeMap<>();
    treeMap.put("notifyId", notifyId);
    treeMap.put("partnerOrder", partnerOrder);
    treeMap.put("productName", productName);
    treeMap.put("productDesc", productDesc == null ? StringUtils.EMPTY : productDesc);
    treeMap.put("price", String.valueOf(price));
    treeMap.put("count", String.valueOf(count));
    treeMap.put("attach", attach == null ? StringUtils.EMPTY : attach);
    treeMap.put("paymentWay", paymentWay);
    treeMap.put("payResult", payResult);
    Set<String> keys = treeMap.keySet();
    StringBuilder sb = new StringBuilder();
    Iterator<String> iterator = keys.iterator();
    while (iterator.hasNext()) {
        String key = iterator.next();
        sb.append(key).append("=").append(treeMap.get(key)).append("&");
    }
    String content = sb.toString().substring(0, sb.length() - 1);
    return conent;
}

2)使用平台分配的支付公钥对 baseString 进行验证签名(验证签名使用算法 SHA256WithRSA):

public static boolean doCheck(String content, String sign, String publicKey) {
    try {
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        byte[] encodedKey = Base64.base64Decode(publicKey);
        PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
        java.security.Signature signature = java.security.Signature.getInstance("SHA256WithRSA");
        signature.initVerify(pubKey);
        signature.update(content.getBytes("utf-8"));
        boolean bverify = signature.verify(Base64.base64Decode(sign));
        return bverify;
    } catch (Exception e) {
        logger.error("验证签名出错.",e);
    }
    return false;
}

3、接口返回值:

要求接口返回字符串:result=arg0&resultMsg=arg1

1) arg0:值为 "OK" 或 "FAIL" 。两者选其一。该值为必填字段

2) arg1:arg0 为 "OK" 时该值可以为空字符串;arg0 为 "FAIL" 时建议提供些有意义的信息,便于查找问题,该值非强制字段。当 arg0 返回 "FAIL" 或发生异常时,快游戏平台会重试,最大重试次数 28 次。


示范例子:

result=OK&resultMsg=成功

result=FAIL&resultMsg=网络原因发货失败
© 2020 OPPO. All rights reserved.

results matching ""

    No results matching ""