快速使用

  1. 添加抖音服务

引用 RsCode.Douyin.dll

servcies.AddDouyin();
  1. 添加抖音参数配置

douyin.json配置

{  
  "app": [
    {
      "appid": "tt6be31d5ef",
      "secret": "8ea50e45ac8ea5",
      "token": "4NTe3b",
      "salt": "4NTe3b5bEvzpN834",
      "privateKeyPath": "cert/douyin/privatekey.pem", //应用的私钥
 	  "publicKeyPath": "cert/douyin/publickey.pem"    //抖音平台的公钥
    }
  ]
}

项目根目录下,创建cert文件夹,保存公钥与私钥

  1. 密钥生成

创建应用公钥

应用公钥和私钥的生成方式可参考:

更详细的证书制作过程,查看这篇文章 Cert证书制作教程open in new window

windows下制作证书

openssl genrsa -out d:\privatekey.pem 2048
openssl rsa -in d:\privatekey.pem -pubout -out d:\publickey.pem

上传应用公钥

登录「抖音开放平台open in new window」,进入小程序的「开发管理-开发设置」页,在「密钥设置」处点击“更新”

img

在cert文件夹中准备两个证书文件 应用私钥privatekey.pem 和平台公钥publickey.pem

应用私钥privatekey.pem 复制上一步生成的privatekey.pem即可

平台公钥publickey.pem,到抖音平台-某小程序-开发-开发配置,显示的平台公钥中,复制它,保存到publickey.pem中

先生成密钥,再测试上线,不用官方提供的参数,有坑

回调签名算法

支付回调通知开发者服务端时,会使用如下的算法进行签名,供开发者验证请求的来源:

  1. 在抖音开放平台-【某小程序】-【功能】-【支付】-【支付产品】-【支付设置】中获取Token, 按照接口文档将所有请求字段(验证时注意不包含 sign 签名本身,不包含空字段与 type 常量字段)内容与平台上配置的 token 一起,进行字典序排序。

  2. 所有字段内容连接成一个字符串

  3. 使用 sha-1 算法计算字符串摘要作为签名

上述步骤计算出的签名 signature,和支付回调请求体里面的 signature 对比,如果不一致,说明请求不可信任(如被篡改)

抖音支付之加签验签开发open in new window

抖音开放平台-【某小程序】-【功能】-【支付】-【支付方式管理】-【支付设置】中查看支付系统秘钥 SALT

参数的签名:1排除参数app_id, third_party_id,sign,other_settle_params 不参与签名

2对其它参数的值(如果参数值为null,添加<nil>)和支付设置中的salt一起进行ascii码排序,

密钥(功能管理-支付-支付设置-SALT)

请求参数中签名是md5签名

回调验签字符例子

{"appid":"tt6be31d5ef4dfda0b01","cp_orderno":"174430247936","cp_extra":"","way":"10","channel_no":"TP2023052621135500973701287530","channel_gateway_no":"","payment_order_no":"DPS2305262113589004661092192889","out_channel_order_no":"TP2023052621135500973701287530","total_amount":100,"status":"SUCCESS","seller_uid":"72370059863623948910","extra":"","item_id":"","paid_at":1685106853,"message":"","order_id":"N7237478737451911458","ec_pay_trade_no":"DTPP2305262113529021149660512889"}

支付自助校验

支付自动校验open in new window

token salt 担保支付中要使用 使用token验签 使用salt签名

DouyinRequest 中参数名方法 CreateParamSign()

PayNotifyData中验签方法VerifySign()

平台公钥没有用到

上次更新:
贡献者: kuiyu