IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 抖音担保支付 PHP demo附带详细解释 -> 正文阅读

[PHP知识库]抖音担保支付 PHP demo附带详细解释

担保支付闭坑说明:

1、关于前端发起支付报错CD0015

//仔细检查下前端  order_id  order_token  格式,数据是由发布支付的接口回调得到的。
orderInfo: { // 订单信息
      order_id: config.order_id,
      order_token: config.order_token
}

2、关于后端,长常见就是发起支付有问题、回调有问题

这里的坑点是:仔细看开发手册你就发现抖音担保支付,发起支付跟回调签名算法不一样。

注意:发起支付签名加密是MD5、回调验证签名是SHA1加密

3、附PHP代码

(一)发起担保支付

    /**
     * 抖音担保支付 - 处理数据
     * @param $openId
     * @param $out_order_no
     * @param $total_amount
     * @param string $body
     * User: huweikeji
     * Date: 2021/7/31 14:44
     */
    public function DouyinPay($openId,$out_order_no,$total_amount,$body = '抖音担保支付'){

        $outOrderNo = $out_order_no;//开发者侧的订单号
        $totalAmount = $total_amount;//支付价格; 接口中参数支付金额单位为[分]
        $subject = "订单号:".$out_order_no; //商品描述也就是标题
        $body = $body;
        $validTimestamp = 60 * 60;//订单过期时间(秒);
        $notifyUrl = "域名/tt_notify"; //这里可以忽略,走字节跳动小程序 -支付 -担保配置-设置回调地址
      	//创建订单 
        $response = $this->createOrder($outOrderNo, $totalAmount, $subject, $body, $validTimestamp, $notifyUrl);

        return $response;

    }
	/**
  *	创建订单
  */
    public function CreateOrder($outOrderNo, $totalAmount, $subject, $body, $validTimestamp, $notifyUrl)
    {
        $params = [
            'app_id'       => $this->appid,
            'out_order_no' => $outOrderNo,
            'total_amount' => intval($totalAmount) * 100,
            'subject'      => $subject,
            'body'         => $body,
            'valid_time'   => $validTimestamp,
            //'notify_url'   => $notifyUrl,
            //'cp_extra' => $cpExtra,
            //'thirdparty_id' => $thirdPartyId,
            //'disable_msg' => $disableMsg,
            //'msg_page' => $msgPage,
            //'store_uid' => $storeUid
        ];

        $params = array_filter($params);
        $params['sign'] = $this->getSign($params, $this->payment['secret']);

        $res = $this->post(
            'https://developer.toutiao.com/api/apps/ecpay/v1/create_order',
            $params
        );
        return $res;
    }

(二)发起支付签名

    /**
     * 支付签名
     * @param array $body
     * @param string $secret
     * @return string
     * User: huweikeji
     * Date: 2021/8/1 16:14
     */
    public function getSign(array $body, string $secret)
    {
        $filtered = [];
        foreach ($body as $key => $value) {
            if (in_array($key, ['sign', 'app_id', 'thirdparty_id'])) {
                continue;
            }

            $filtered[] =
                is_string($value)
                    ? trim($value)
                    : $value;
        }

        $filtered[] = trim($secret);
        sort($filtered, SORT_STRING);
        return md5(trim(implode('&', $filtered)));
    }

(三)验证回调签名

    // **************** 以下方法 是字节小程序支付 签名处理方式

    public function getNotifySign(array $body, string $secret)
    {

        $filtered = [];
        foreach ($body as $key => $value) {
            if (in_array($key, ['msg_signature', 'type'])) {
                continue;
            }
            $filtered[] =
                is_string($value)
                    ? trim($value)
                    : $value;
        }
        $filtered[] = trim($secret);
        sort($filtered, SORT_STRING);
        $filtered = trim(implode('', $filtered));

        return sha1($filtered);
    }

(四)支付回调

    public function notify()
    {
        $notify = \request()->param();

        if ($notify['msg_signature'] !== $this->getNotifySign($notify, $this->payment['app_id'])) {
            Log::info('回调验证错误');
        } else {
            //获取订单信息
            $order = json_decode($notify['msg'], true);
            //处理订单
            $data = ['order_sn' => $order['cp_orderno']];
            Log::info('抖音担保支付效验成功');
        }
        $data = ['err_no' => '0', 'err_tips' => 'success'];
        return json($data);
    }

(五)回调即CURL post提交

    public function post(string $url, array $params = [], array $headers = [])
    {
        $headers[] = 'Content-type: application/json';

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $output = curl_exec($ch);
        curl_close($ch);

        return json_decode($output, true);
    }

以上就是抖音担保支付 PHP版本demo,代码中关于支付秘钥、订单数据格式等自行替换修改即可。

希望以上代码能够帮助你。😀

最后一次编辑于?2021年08月13日

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-14 13:46:45  更:2021-08-14 13:48:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/14 0:55:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码