需要注意的是抖音支付属于聚合支付,在抖音小程序支付无需自己写微信、支付宝相关代码,就统一用抖音支付就行,本文的一些PHP代码仅供前端参考使用,php专业就算了 - -
前期准备
你可能需要给小程序先开通支付功能:小程序控制台-支付,并在设置内完成一些基础设置,包括小程序类目等
设定密钥(签名与验签会用到):小程序控制台-开发-开发配置-生成密钥
配置支付结果回调地址:小程序控制台-开发-解决方案管理(借用一张其他博主的图,名称见水印,见下图)
生成订单参数时没有回调地址参数,所以需要在这里设置,推荐连着退款通知回调地址(虽然退款回调地址在发起退款时可以有参数设置)一块设置了,设置完成要点击“发布上线”
编译好的代码要在根目录新建package.json文件,每次都要新建,还要重启编译器。官方文档-使用限制都有,内容为,
{
"industrySDK": true
}
其他废话不多说,直接上代码:
JS部分:JS api官方文档
//request是我自己封装的发送请求函数,可用自己函数或uni.request也行
// #ifdef MP-TOUTIAO
request({
url: `xxx.php`, //请求data及byteAuthorization的地址
data: {
"xxxxx": "xxxxxxxxxx" //传一些订单参数
},
method: 'POST',
needLoading: true
}).then(v => {
tt.requestOrder({
data:v.data,
byteAuthorization:v.byteAuthorization,
success: function(res) {
tt.getOrderPayment({
orderId: res.orderId,
success: function(res) {
//支付成功逻辑
},
fail: function(res) {
//支付失败逻辑
}
})
},
fail: function(res) {
//支付失败逻辑
}
})
}).catch(e => {
console.log(e)
//发送请求失败或获取结果失败等等
})
// #endif
PHP部分,xxx.php 生成下单参数与签名-官方文档
<?php
date_default_timezone_set('prc');
/*
$price = $_POST['price'];
$pay_type = $_POST['pay_type'];
$order_id = $_POST['order_id'];
....一些下单参数xxx
*/
if(!$price || !$pay_type){
echo json_encode(array("resultCode"=>800,"message"=>"价格或支付方式不能为空"));
exit;
}
$root = $_SERVER['DOCUMENT_ROOT'];
function getByteAuthorization($privateKeyStr, $data, $appId, $nonceStr, $timestamp, $keyVersion) {
$byteAuthorization = '';
// 读取私钥
$privateKey = openssl_pkey_get_private($privateKeyStr);
if (!$privateKey) {
throw new InvalidArgumentException("Invalid private key");
}
// 生成签名
$signature = getSignature("POST", "/requestOrder", $timestamp, $nonceStr, $data, $privateKey);
if ($signature === false) {
return null;
}
// 构造 byteAuthorization
$byteAuthorization = sprintf("SHA256-RSA2048 appid=%s,nonce_str=%s,timestamp=%s,key_version=%s,signature=%s", $appId, $nonceStr, $timestamp, $keyVersion, $signature);
return $byteAuthorization;
}
function getSignature($method, $url, $timestamp, $nonce, $data, $privateKey) {
// printf("method: