1. 下载DEMO
![]() 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();
