代收异步通知

# 代收异步通知

  • 请注意:当前业务只有在订单支付成功的时候才有回调通知接收到。

  • 进行验签时,要用 **商户后台-收付款配置-API配置中提供的平台公钥**进行解密!!!

  • 数字货币有两种特殊情况:无单模式以及支付金额与下单金额不符,为此我们将异步通知进行了调整,如下:

  • 1.如果是上述特殊情况,我们会生成一笔新的成功订单进行通知,您需要根据通知的信息进行验证,并生成新的订单;

  • 2.根据通知的商户订单号(orderNum)查询是否您的系统存在该订单,建议您在下单成功时同时存储我们的平台订单号(platOrderNum),做双步校验;

  • 3.根据通知的参数specialStatus(0-默认,1-特殊状态)判断,如果为1则判断为上述特殊情况.

  • TopPay结果异步通知后,需响应 **SUCCESS**字符串

  • 否则TopPay将继续向下游发起5次通知


import com.google.gson.JsonObject;

public class TopPayNotify {
  // 测试账号
  private static final String MCH_ID = "PH0000001";  // 商户号
  private static final String PLAT_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2JoMfFqLsSJjAiCahEnlP3aRj8yCT+WHzR+VvPBTw9S1i7iYWb+MY09CG/HYuHF4+IxshXDJygmndxKf/esuwPybS8mAd//yubHpmZsmBqg1FffT8VH1APa6ZRWASUp4U01ZrbCCp35QA8FuWrJGMJxGx4xk7KUtV2yujxC8noQIDAQAB";  // 平台公钥
  public static void main(String[] args) throws Exception {
    // 代收
    JsonObject notifyBody = new jsonObject();
    boolean verifyResult = TopPayRequestUtil.verifySign(notifyBody,PLAT_PUBLIC_KEY);
    if (verifyResult) {
      // ... 签名验证通过,处理正常的业务逻辑
    } else {
      // ... 签名验证错误
    }
  }
}

<?php

$res = json_decode(file_get_contents('php://input'), true);
$platSign = $res['platSign'];
unset($res['platSign']);
$public_key = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFJ/AmUV4Z8udG8aOBUt/kEwc/DbxF5Gtfw6Y00NHQ4Pz2X2x9IxjUZxn2dnFxmrmhqKNlfwXOqyejhBzi0pSHyGoI4XP9IEfZGO6YkSb9DCY1ZxX8fDl2G+tPCbWYTVO4JutFmzTWgk1Uhhu6L9dlOMUHvZf3/6czA/a9C7azXwIDAQAB';
$decryptSign = public_key_decrypt($platSign, $public_key);

$params = $res;
ksort($params);
$params_str = '';
foreach ($params as $key => $val) {
    $params_str = $params_str . $val;
}

if($params_str == $decryptSign) {
    if($res['code'] == '00') {
        echo 'success';
    }
    else {
        echo 'fail';
    }
}
else {
    echo 'fail';
}

function public_key_decrypt($data, $public_key)
{
    $public_key = '-----BEGIN PUBLIC KEY-----'."\n".$public_key."\n".'-----END PUBLIC KEY-----';
    $data = base64_decode($data);
    $pu_key =  openssl_pkey_get_public($public_key);
    $crypto = '';
    foreach (str_split($data, 128) as $chunk) {
        openssl_public_decrypt($chunk, $decryptData, $pu_key);
        $crypto .= $decryptData;
    }

    return $crypto;
}

# 通知参数

参数 描述 示例
platOrderNum 平台订单号 BK_1563278763273
orderNum 商户订单号 T1231511321515
mchNo 商户编号 PH0000001
amount 代收金额 100000
fee 手续费 500
status 状态 SUCCESS ,参考订单状态
hashCode 交易哈希 5e5c356af0ewrhgnf3d757h8a6a5506cc66354620
sendAddress 发送地址 TDBbbeAB32WE576DVGE82GEC5BhsZs4
inAddress 接收地址 TDBbbeAB32WE576DVGE82GEC5BhsZs4
mchUserId 商户用户ID M00001
specialStatus 特殊状态(0-默认,1-特殊状态) 0
currency 币种 USDT
netWork 链网络 TRC20
version 版本号 1
sign 平台签名 ja6R8eukQY9jc8zrhtf34654ungj7u8sdgdfjfs