应用侧服务端接入

本页面接口已废弃, 服务端接入参考- 支付通知

订单查询接口

建议:如有主动查单需求,在跳转到公益侧支付前,请求参数中最好带上应用侧的订单号。

链接:https://ssl.gongyi.qq.com/cgi-bin/gywcom_iot_query_trans.fcgi

请求参数列表:

字段 类型 可选 描述
transcode string 二选一* 公益测的订单号
btr_transcode string 二选一* 应用侧自己的单号
bid number 必选 公益侧提供(商户ID)
sign string 必选* 签名
nonce_str String(32) 必选 随机字符串,不长于32位。推荐随机数生成算法

二选一的意思是这两个参数有其一即可。

sign 参数的生成规则是,除了sign其他字段按字典序,同时尾部加入商户密钥(用 key 来标识)参与md5签名(32位)。

如:bid=100000145&btr_transcode=xxx&nonce_str=xxxxxxxx&key=xxxx

返回参数说明:

字段名 说明
code 返回状态,(4099 为未查询到该订单)
msg 返回的错误信息
id 项目 ID
money 金额
uin qq 号
et 渠道标签
gt 组别标识
openid 微信openid
btr_transcode Bid 自用订单号
transcode 公益订单号
time 捐赠时间
type 乐捐 / 月捐
sign 签名
third_transcode 微信订单号 / 手Q订单号
attach 商户 attach 回包
status 订单状态:1 => success \ 0 => notpay
nickname 昵称
headimgurl 头像

返回示例:

{
       "code": 0,
    "msg": "ok",
       "op_time": 1510737490,
       "data": {
           "id": 5888,
           "money": 1,
           "uin": 0,
           "et": "P",
           "gt": "66",
           "openid": "o1tgX0WcxlZqWPIk7hieTMaEnz_k",
        "btr_transcode": "1321652601201711091500014306",
           "transcode": "1321652601201711091500014306",
           "time": "2017-11-09 23:42:21",
           "type": "WXL",
           "sign": "E226CCEB99642EDEEA8441A43D77712E",
           "third_transcode": "4200000032201711093565112306",
           "attach": "xxxxx    |xxxxxxxxx|XDDDDDDDD",
           "status": 0,
           "nickname": "%E9%83%AD%E6%99%93%E6%B3%A2",
           "headimgurl": "https%3A%2F%2Fwx%2Eqlogo%2Ecn%2Fmmopen%2Fvi%5F32%2F52eZlEWhZMmUnoIWxKmVvqluW9Fn6Ssx9Usj0WzH7xDlGMdug8wY384licTmpUHtSQaI9aEvuicAx8CLDkyXe0eQ%2F0"
       }
   }

支付成功回调

对于支付成功的订单,公益后台会发起一次异步的支付回调到预先设置的回调地址:

  1. 格式内容为 UTF-8 编码 XML 格式的文本,字段类型与 查单接口 保持一致

  2. 回调失败次数最多允许 5次,时间衰弱为1s, 2s, 3s, 5s, 10s,以便下次继续回调

  3. 回调地址要先在公益侧填写好

  4. 回调内容示例如下:

    <xml>
    <bid><![CDATA[100000145]]></bid>    <!--商户id -->
    <id><![CDATA[1145]]></id>    <!--项目id -->
    <btr_transcode><![CDATA[12312312789789]]></btr_transcode>    <!--商户方的订单好-->
    <et><![CDATA[def]]></et>    <!--入口类型-->
    <gt><![CDATA[]]></gt>    <!--组别标识-->
    <money><![CDATA[1]]></money>    <!--交易金额-->
    <sign><![CDATA[E226CCEB99642EDEEA8441A43D77712E]]></sign>    <!--订单信息签名-->
    <time><![CDATA[2017-05-12 03:12:53]]></time>            <!--账单创建时间-->
    <status><![CDATA[2]]></states> <!--账单状态-->
    <attach><![CDATA[2017-05-12 03:12:53]]></attach> <!--attach回包-->
    <transcode><![CDATA[1201423701201705121500007027]]></transcode>    <!--公益平台的订单号-->
    <third_transcode><![CDATA[12014237016011201705121248951244]]></third_transcode>  <!--微信的交易订单号-->
    </xml>
    
  5. 签名算法

    1. 设所有发送或接收到的数据为集合 M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA,特别注意 以下重要规则:

      • 参数名ASCII码从小到大排序(字典序)
      • 如果参数的值为空不参与签名
      • 参数名区分大小写
      • 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验
      • 接口可能增加字段,验证签名时必须支持增加的扩展字段
    2. 在 stringA 最后拼接上 key 得到 stringSignTemp 字符串,并对 stringSignTemp 进行 MD5 运算,再将得到的字符串所有字符转换为大写,得到 sign 值 signValue。如果没有特别需求,默认使用md5加密

      假设传送的参数如下:

      bid: 10000100
      
      transcode: 1321652601201711091500014306
      
      third_transcode: 1321652601201711091500014306
      
      body: test
      
      nonce_str: ibuaiVcKdpRxkhJA
      

      第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:

      stringA="bid=10000100&body=test&transcode=1321652601201711091500014306&third_transcode=1321652601201711091500014306&nonce_str=ibuaiVcKdpRxkhJA"

      第二步:拼接API密钥:

      // 注:key为应用侧在公益侧设置的密钥key
      stringSignTemp=stringA+"&key=192006250b4c09247ec02edce69f6a2d"
      
      // 注:MD5签名方式
      sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A9CF3B7"
      
      // 注:HMAC-SHA256签名方式
      sign=hash_hmac("sha256",stringSignTemp,key).toUpperCase()="6A9AE1657590FD6257D693A078E1C3E4BB6BA4DC30B23E0EE2496E54170DACD6"
      
© 1998 - 2022 Tencent Inc. all right reserved,powered by tencent.更新时间: 2024-07-09 14:15:02

results matching ""

    No results matching ""

    results matching ""

      No results matching ""