1. 下载DEMO

php
PHP DEMO

2. PHP示例代码

<?php
require_once "RsaHelper.php";

use App\Utils\RsaHelper;

class TestController
{
    /**
     * 请求地址
     * @var string
     */
    public static $apiurl = 'http://cfct.weipaitang.com/openapi/v1/call';

    /**
     * MD5 APPID
     * @var string
     */
    public static $appidMd5 = 'c11709f32d3eaa68';

    /**
     * MD5 签名秘钥
     * @var string
     */
    public static $md5SignKey = 'QKBgQC5zPAKDE3SqGSIb3DQEBAQUAA4GNA';

    /**
     * RSA APPID
     * @var string
     */
    public static $appid = 'e4d0153d67291417';

    /**
     * 有证链平台公钥文件
     * @var string
     */
    public static $platformPublicKey = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5zPAKDE3stPNOaoYpE/zfUHDe
Llpggi6NwkqU5Zt4vEe1Wcco5TTwqzs+37VH5/T/j0U19Ze32VHjWrpQGZGOr6PV
aSIrW9b6HJgsTd7Uhh47KiXeL3aDD38iJkMhv2r2fe9m8Sno4sqoMEH67pbwSrcU
7DqDclId5NlL5GrTeQIDAQAB
-----END PUBLIC KEY-----';

    /**
     * 机构自己的公钥文件(需要提供给有证链平台)
     * @var string
     */
    public static $ownPublicKey = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6q14p5JYUGQFWxaH/J+cMhPpr
K850q+GY3o7XUoi6/9Gde46yy4ZfPo26pVPJGGgkGRJpFOIGLvevruDA9SQc/BKA
FCTIcnNxvq9ZyzPd+GHX9aCIPZeewv8kl4pzBEayshb+6EIbh1eqhz97kshFS6DF
7bbfW8pMpGR6Ib8dTwIDAQAB
-----END PUBLIC KEY-----';

    /**
     * 机构自己的私钥文件(请勿泄露)
     * @var string
     */
    public static $ownPrivateKey = '-----BEGIN RSA PRIVATE KEY-----
MIICXwIBAAKBgQC6q14p5JYUGQFWxaH/J+cMhPprK850q+GY3o7XUoi6/9Gde46y
y4ZfPo26pVPJGGgkGRJpFOIGLvevruDA9SQc/BKAFCTIcnNxvq9ZyzPd+GHX9aCI
PZeewv8kl4pzBEayshb+6EIbh1eqhz97kshFS6DF7bbfW8pMpGR6Ib8dTwIDAQAB
AoGBAJngehb+n9ihZEErWYcEVao0VFnUGrSCm81waT+Ggb/k8d5n5BHvRC1vW1Xo
w1CaFf7rzAljdY6zWOoxtoRZkBIMHDDnSVZScyLcEYzDpSy/B260vamq69fM927p
DF39rr/O3Ioq392gyDfGy70Qc/xX+uMmVVt5XqwTOOCJHP3BAkEA30d7jN2SATp9
c0fCjbzDiJblglGTFKzzjdX6OBJ594nUYECIU978HB/sScxu8P3z7x5QEJA6t7AI
eEe4FGq/7QJBANYGb3QV539kwIO3dhU8CgCMN+FMxDdo5KLV3GREfzNE0oDcwFDJ
IjiU2F0zWANmtTulZdKSaPppUZ79xLvzUqsCQQDUK1UYMqQ/TplPJm2Vyj30WY+W
GnYtO3vk1+SBy+zicLLDFA93w3jGMP+T0RPLJUbbfm6Ojr99NWWXBm/B1v6xAkEA
gKBvfUnozkRj+wVYf1yM+lVLBCmZx19QAZkcElqkQ9C53l5Nan/nBDBYdHL2E103
0HgP4OTDGLQRLMeA5CBRbwJBALpxHw5iBCIvEiaE+7ZKmV4M3rT3OtG0oOPk2wnQ
jIuc+mw3Gj1iqSq0zznWpAVAiDhtAaUTh1+2FtaYRDXIeBA=
-----END RSA PRIVATE KEY-----';

    /**
     * 测试接口
     */
    public function test()
    {
        try {
            # 1. 组装业务参数
            $bizData = [
                'orgId' => 209,
                'timestamp' => time(),
            ];

            # 2. 转换成JSON字符串
            $bizDataStr = json_encode($bizData, JSON_UNESCAPED_SLASHES + JSON_UNESCAPED_UNICODE);

            //////////////////////////////////////////////////
            // 3.1 4.1 与 3.2 4.2 使用一组即可 
            // 3.1与4.1 是RSA数据加密签名请求
            // 3.2与4.2 是明文参数请求,只进行md5验签
            //////////////////////////////////////////////////

            # 3.1 RSA完成数据加密和数据签名
            $encryptData = RsaHelper::encrypt($bizDataStr, self::$platformPublicKey);//公钥加密数据
            $sign = RsaHelper::sign($bizDataStr, self::$ownPrivateKey, 'sha256WithRSAEncryption');//机构自己的私钥加密生成签名

            # 4.1 组装请求参数
            $postData = [
                'appId' => self::$appid,
                'bizData' => $encryptData,
                'sign' => $sign,
                'call' => 'call.identConLibrariesList',
                'encType' => 1,
                'signType' => 1,
            ];

            /*# 3.2 根据签名规则 md5(key + bizdata + key) 生成数据签名
            $md5SignKey = trim(self::$md5SignKey);
            $sign = md5($md5SignKey . $bizDataStr . $md5SignKey);

            # 4.2 组装请求参数
            $postData = [
                'appId' => self::$appidMd5,
                'bizData' => $bizDataStr,
                'sign' => $sign,
                'call' => 'call.identConLibrariesList',
                'encType' => 0,
                'signType' => 2,
                'timestamp' => time(),
            ];*/

            # 5. 发起请求
            $ret = $this->postRequest(self::$apiurl, $postData);

        } catch (\Exception $e) {
            $ret = [
                'error' => '出错了~~~' . $e->getMessage(),
            ];
        }


        echo "请求地址: " . self::$apiurl . PHP_EOL
            . "请求业务参数: " . $bizDataStr . PHP_EOL
            . "POST请求参数: " . json_encode($postData, JSON_UNESCAPED_SLASHES + JSON_UNESCAPED_UNICODE) . PHP_EOL
            . "响应结果: " . json_encode($ret, JSON_UNESCAPED_SLASHES + JSON_UNESCAPED_UNICODE) . PHP_EOL;
        //return $ret;
    }

    /**
     * 发送POST请求
     * @param $url
     * @param $data
     * @return mixed
     * @throws Exception
     */
    public function postRequest($url, $data)
    {
        if (is_array($data)) {
            $data = json_encode($data, JSON_UNESCAPED_SLASHES);
        }
        $headers = [
            'Content-type: application/json;charset=UTF-8',
            'Content-Length: ' . strlen($data)
        ];

        //开启curl
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($curl, CURLOPT_SSLVERSION, 1);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        $ret = curl_exec($curl);
        $parse_ret = json_decode($ret, true);
        if ($parse_ret == NULL) {
            $error = 'cURL errno: ' . curl_errno($curl) . '; error: ' . curl_error($curl);
            curl_close($curl);
            throw new \Exception($error);
        }

        curl_close($curl);
        return $parse_ret;
    }
}

$controller = new TestController();
$res = $controller->test();
Copyright © 微拍堂 2020 all right reserved,powered by Gitbook该文件修订时间: 2021-05-07 15:35:53

results matching ""

    No results matching ""

    results matching ""

      No results matching ""