用户手机号授权结果回调通知

更新时间 2024-07-24 02:58:49
收藏
我的收藏
抖音开平通过券模板领券回调通知接口将用户授权的手机号加密后通知给开发者。​

使用限制​

    抖音开平会尽可能的将用户手机号授权结果通知给开发者,由于网络超时等情况,同样的通知可能会多次发送。开发者务必支持通知消息的幂等处理。 推荐的做法是,当开发者收到通知消息进行处理时,先判断该通知消息是否已经处理。如果未处理,再进行处理;如果已处理,则直接返回结果成功。在对业务数据进行状态检查和处理之前,可采用锁进行并发控制,以避免函数重入造成的数据混乱。​
    开发者对于回调通知的内容务必要用平台公钥做签名验证,防止数据泄露导致出现“假通知”,造成损失。​

接口说明​

抖音开平通过回调通知接口将用户手机号授权结果的消息通知给开发者,开发者需要接收处理该消息并响应,响应时不需要签名。​
如果抖音开平收到开发者的响应不符合规范或超时未收到,抖音开平会认为通知失败,并通过一定的重试策略再次发起通知。开发者应尽可能提高接收通知的成功率,抖音开平不保证通知最终能成功。​

回调信息​

HTTP URL​
券模板配置的回调通知callback_url,详细可见券模板创建 。​
要求必须为https地址。请确保回调通知URL是外部可正常访问的,且不能携带后缀参数,否则可能导致无法接收到回调通知。​
HTTP Method​
POST​

请求头​

属性​
数据类型​
必填​
说明​
content-type​
string​
是​
application/json​
Byte-Timestamp​
string​
是​
签名时间戳​
Byte-Nonce-Str​
string​
是​
签名随机串​
Byte-Signature​
string​
是​
签名值​
回调通知签名验证,可参考: 签名算法重点关注 “签名验证” 部分。如下图所示部分:​

请求 Body​

参数
类型
是否必填
描述
示例值
type​
string​
是​
回调类型标记,手机号授权结果回调固定为"authorized_phone"。​
authorized_phone​
msg​
string​
是​
回调信息的 json 字符串。​
type=authorized_phone时,msg 为如下结构:​
参数
类型
是否必填
描述
示例值
coupon_id​
string​
是​
    券id,由平台生成,全局唯一​
    开发者可以用coupon_id作为幂等键,实现通知消息的幂等处理​
709243586555366​
app_id​
string​
是​
小程序appid​
ttxxxxxx​
user_open_id​
string​
是​
领券用户的小程序open_id​
543SXXXXf234​
user_union_id​
string​
是​
领券用户的union_id​
3d5f4913-xxxx-443d-b7ab-538db3f4e237​
encrypted_phone​
string​
是​
加密后的手机号​
tFtxSF1KRkL4dxnMzqKCoApxnKAXXXXXXXXXXXXXLZl+h1I5JRhgCGPg/pQNXYtNbiDV==​
rsa_key_version​
int32​
是​
    rsa加解密密钥版本号。​
    抖音开放平台默认使用开发者在平台上上传的最新版本的密钥,但在发券期间如果开发者进行变更,会存在短时间内仍使用旧版本公钥进行加密的场景,因此需要开发者根据版本号使用对应的私钥进行解密。​
1​
talent_open_id​
string​
是​
主播的小程序open_id​
6879SAVs5XXX0093​
talent_account​
string​
是​
主播的抖音号​
687899XX92​
用户领手机号授权结果回调通知,开发者可以用coupon_id作为幂等键,实现通知消息的幂等处理。

密文手机号解密方式​

    1.解析回调参数中的rsa_key_version字段,获取对应版本的私钥。(在开放平台上传应用公钥时需要开发者保存好对应的私钥,否则会无法解密。)​
    2.将encrypted_phone进行base64 decode后,用私钥进行rsa解密得到明文手机号。​

示例:​

    rsa私钥:​
js
复制
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCiUVuI/B+wk+fq
HEEWh/Nas0smjC0cbs7kddZtF3UiDvUl6dYzPcfM+hJGV9qKaXsugGiDQNb6sxMF
ZYm30O3ekq87jFa+0ZkuUd7bXEACUFzg8x5zjmE26Fbna/vtMlQYvIY0bmUNmD5Q
JIUn69+xLEbcPHngXEnREo9TowUdkGv2IsR2BqE1HvLYtdg+zn71e2DseUjxaNqf
/Bk0+P+6AbcWE+DCFULpSRLrTTCNQszKK7bkPcpJJDSUwOzhNr05sUJiq7dZ1lO+
zuGZT22xDl+Ru4MmwS8vT89bJcLLgPVPHkMlt37CAitNLcbG2GKeqTxD3ktTEhV1
Y8IA2dQnAgMBAAECggEACACY0a0UZuEz2s/fyZuUPNGAD/tzMeaonozMsH4qkS5J
mb/ohogyNIHTqtIj/RTsNMOx416r+pofgvGZk41iXMnAh+AIWsn8klMI+KmYokSR
/6kcxDetxUY5GpmxRuVnTfzlZOpYYw4xbEQQqIIxegujxrHYlF4YaY1PsaDk3Ksw
9N3Inz0YbqnhBSQd2eecmAsMrw/CPdPXwLktSDFyiX0zCQpxnA7BZUiEiBsltt7j
YUkrK7Eg+kFA9nk6mvjnJofgSDe0AuGR/hbWHS7rAAHb6tsN+oqsrGHRVpfSdjsV
z8lVlpwLrQ27ShNd0Uzo5sIq19fmd9Y5KBWB+GH4KQKBgQDYRLOYasgMwGaVVMlJ
wyjstYCCz7D+x5GvxrLXd042mmJJ7D93yRbgoQnn6utsHVoDq3Cm1TQny8kxy6K3
wtAhVbyDGw8rkLsPQi49THBs1rSMWKnVvRG8P9ewYi7AZ6+xCYwkMP94nNpXsPR6
f2TOx79Do2iG7+1sI2fLu0/5owKBgQDAI0/WJ3k87FYkYxxp4Dw7W/otGS6OBOlY
SIi4t/vcnqc6mBVUQNQd+xTLFLDbBFfZgeLhZuH3KKNA7Op2Y+03EoroUJDheAFy
oIiJ/llnJd7cwOArlTYgh3o0BAtya5481YZJHK5VxBBEc9exKxudDoeYmKLnqqKk
OZtz3R1rrQKBgD0K1y5UJXcD73CC5/W78hct+8HwYWLobYSRrvUGJbtfxBJdbmSf
C6gHjEY7louDlV6nyzorv3bkHDvD4H/BqwFds8HFp3iCd2oNIgQHSUxPJdLfS8Ca
hyD9XCHa9Js2KO7tZPLqKZGfpDlQJxFUV93Nn3y16ND9c6QsMiXdDuvFAoGANiA8
d1m7X5w8UBfTg0f178rjWR0E7mEX0xTr3w2FWAshlPIO4CM7Hg8DNopnn+tDTDS4
00KGWXgLNVkIW72er6r7kqJPjhSeY8oxbJ5IVTRn6cwz2lM4YkWH+WtCRkNm2kBU
ifgYbHTFGGOB2ZkJOF9Fd4lYKub41kacMjGR/ikCgYBH6XqtBE85fJ5xlQBA0R8G
pL66muA8PNOC53bKglOs+rbuxVk3Qwz57tOte0ke0U6jLQVRnR9YZ7ttvz5TscZx
Ff/xQRdmqAFteQz2ENYQkiNlY9xNxsF1vJrqt6JRmTH47XTyxRDZIPo7wu47P4tE
6s5GDwkznMfsJu7K0fgwgA==
-----END PRIVATE KEY-----
    加密后的手机号:ilaYjwpcZQ4SqTEQs/1g8CMWLzfkjkJhw3A8Gz48j/NRGzAfkc8ptHBHcWYh6C0oW6sKrQJPO1Kov0D8MnUhrlAHP+SnvsAQEud+8Z2ugrszgmKXUWP3Eeb+jOGl4VXwNj1B++iYFhAPtq/sW5c0ipUR22JGCJt6Aqt5ZYJAexnRqHKe6jaEqYG6KXvV7rdmL17xFIsuMGBpsZqxGYhaD9u7Rr/IuSEy7qW+Qm172s2gKoOmLGtmD7I9szE5GNo0mReZPoHDQhlFOwP5Q3yA2sz3i+EZEyukB7DNdatL7KD4/l4L+ZTAi7AJIuNvEPWtLKuRnygzpyo3KrPw/uis6w==​
    解密结果:12345678901​

回调示例​

json
复制
{
"type": "authorized_phone",
"msg": "{\"coupon_id\":\"709243586555366\",\"app_id\":\"ttxxxxxx\",\"user_open_id\":\"\",\"\":\"3d5f4913-xxxx-443d-b7ab-538db3f4e237\",\"encrypted_phone\":\"tFtxSF1KRkL4dxnMzqKCoApxnKAXXXXXXXXXXXXXLZl+h1I5JRhgCGPg/pQNXYtNbiDV==\",\"rsa_key_version\":1,\"talent_open_id\":\"6879SAVs5XXX0093\",\"talent_account\":\"687899XX92\"}"
}

响应参数​

名称
类型
是否必填
描述
示例值
err_no​
int32​
是​
返回码,0代表成功​
0​
err_msg​
string​
是​
返回码信息​
success​
应答时不需要签名。开发者成功处理回调时,http 应答状态码需为200err_no务必返回0err_msg务必返回success

响应示例​

正常响应示例​

json
复制
{
"err_no": 0,
"err_msg": "success"
}

异常响应示例​

json
复制
{
"err_no": 400,
"err_msg": "business fail" // 开发者可返回可对外的报错信息
}

Q & A​

验签、解密使用的密钥是服务商的还是授权小程序的?​