字节小程序
开发者社区
小程序小游戏
登录
担保支付 php 避坑指南

担保支付 php 避坑指南

14951浏览作者: 用户2570851018202
1.特别感谢:


    字节跳动团队的 官方同学  对问题的指导与支持

2.解决问题:

2.1、参数解析异常
             最开始在调用的时候content-type类型使用的是form-data,而文档中要求的为application/json;此问题会造成参数解析异常报错
    2.2、签名效验失败
            2.2.1  在提交请求的时候需要使用使用json_encode函数;如果我们直接使用的json_code($data)的话会出现一个问题;就是回调的rul会被转义;加签的时候通不过;应该也不会产生回调。
            2.2.2 文档中cp_extra字段表示‘开发者自定义字段,回调原样回传’;相信大部分的程序员会定义与业务相关的一段json;而json在被json_ecode()的时候也会被转义;我这里选择的是外部使用urlencode一下。
    2.3、CD0015
            此问题由前端小伙伴解决;没太听懂什么意思;大概的意思使用文档中的demo;在service这个字段中传5;而之前一直传输的是1
    2.4、没有回调
            因为是我目前处于测试阶段;所以使用的https中的ssl证书是自己生成的,为非安全证书;所以造成了在程序中没有看到请求的日志,应该是在https协议层就断开了;具体没有研究相关的问题。

tips:如果你的app_id或者pay_secret写错的话不会提示对应的字段错误;而是抛出签名校验异常。

--------------------------------------------------------废话说完了上代码-------------------------------------------------------

<?php

$url = 'https://developer.toutiao.com/api/apps/ecpay/v1/create_order';
$postdata['app_id'] = 'tt***********6';
$postdata['out_order_no'] = (string) time();
$postdata['total_amount'] = 2;
$postdata['subject'] = '中文';
$postdata['body'] = 'ddd';
$postdata['valid_time'] = 86400;
$postdata['cp_extra'] = urlencode(json_encode(['aaa'=>234,'bbb'=>'aaa']));
$postdata['notify_url'] = 'https://k**********et/mini/common/pay/dyinotify' ;
$postdata['thirdparty_id'] = '';
$postdata['disable_msg'] = 0;
$postdata['msg_page'] = 'asger';
$postdata['store_uid'] = '1';
//收银台加密
function getSign($params)
{
    unset($params["sign"]);
    unset($params["app_id"]);
    unset($params["thirdparty_id"]);
    $paramArray = [];
    foreach ($params as $param) {
        $paramArray[] = trim($param);
    }
    $paramArray[] = trim('p4xU0Qr*PG4');
    sort($paramArray,2);
    $paramArray = implode('&', $paramArray);
    $signStr = trim($paramArray);
    return md5($signStr);
}

$postdata['sign'] = getSign($postdata);
$res = json_post($url, $postdata);

print_r($res);

function json_post($url, $data = NULL)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    if (!$data) {
        return 'data is null';
    }
    if (is_array($data)) {
        $data = json_encode($data,320);
    }
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json; charset=utf-8',
        'Content-Length:' . strlen($data),
        'Cache-Control: no-cache',
        'Pragma: no-cache'
    ));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $res = curl_exec($curl);
    curl_close($curl);
    return $res;
}
最后一次编辑于 2021年12月01日
加载中