小游戏支付
1 组装请求参数
由支付文档可知必填的参数有哪些,以下是组装好的请求参数:
/**
* 组装前端调起支付需要的数据
*/
public function getPayData ()
{
$data = [
'appId' => '这里填小游戏应用ID', // 应用ID
'cpOrderNumber' => uniqid(), // 订单号
'productName' => "商品名称", // 商品名称
'productDesc' => "商品描述", // 商品描述
'orderAmount' => 100, // 商品价格,int类型
'notifyUrl' => 'http://your.domain.com/notify' // 回调通知URL
];
// 签名
$data['vivoSignature'] = $this->getSign($data, '支付密钥');
return $data;
}
getSign()
:对数据进行签名,具体代码见 1.1。
1.1 对数据进行签名
/**
* 对数据进行签名
*
* @param $data array 需要签名的数据
* @param $secret string 小游戏支付密钥
*
* @return string
*/
public function getSign($data, $secret)
{
unset($data['signature'], $data['signMethod']); // 不参与签名字段
ksort($data);
$signStr = urldecode(http_build_query(array_filter($data, 'strlen'))).'&'.md5($secret);
return md5($signStr);
}
2 支付回调
用户支付完成后,vivo 小游戏会通知商户,商户需要在接受数据、处理数据后,返回应答。
回调地址是在步骤1中的notifyUrl
字段填写的。
public function notify()
{
$notifyData = request()->post();
// 检查回调参数是否正确
if (empty($notifyData['signature']) || $notifyData['respCode'] != 200
|| $notifyData['tradeStatus'] != '0000') {
return "fail";
}
// 对回调数据进行验签
$sign = $this->getSign($notifyData, '这里填支付密钥');
if ($notifyData['signature'] != $sign) {
return "fail";
}
// TODO:按照业务更新订单支付状态等等
return "success"; // 通知vivo回调成功
}
getSign()
:对数据进行签名,具体代码见 1.1。
如果文章有帮到你的话,别忘了点赞收藏噢 :smile: