小游戏支付

未匹配的标注

1 组装请求参数

文档地址:minigame.vivo.com.cn/documents/#/ap...

由支付文档可知必填的参数有哪些,以下是组装好的请求参数:

/**
 * 组装前端调起支付需要的数据
 */
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:

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~