1、生产公钥和私钥
http://web.chacuo.net/netrsakeypair
image.png
2、生成sign签名 ( 最重要,也最容易出错 )
一般都是采用ASCII 码从小到大排序,拼接规则要看具体接入第三方的要求
例如:支付接口
支付接口请求参数
参数名 | 参数值 |
---|---|
merchantId | 商户id |
money | 支付金额 |
orderSn | 支付单号 |
notifyUrl | 回调地址 |
desc | 备注 |
sign | 签名 |
下面以php代码为列
//组装参数
$params = [
'merchantId' => 100000863,
'money ' => 1000,
'orderSn' => '168000023695',
'notifyUrl' => 'http://xxx.com/notify',
'desc' => '支付'
];
//健名按ASCII 码从小到大排序
ksort($params);
//字符串拼接
$params_str = '';
foreach ($params as $key => $val) {
$params_str .= $val;
}
//使用第一步生成的私钥对拼接字符串 params_str 进行RSA加密,得到签名(这一步特别注意容易出错)
$sign = pivate_key_encrypt($params_str, $mchPrivateKey);
//生成签名的方法
function pivate_key_encrypt($data, $pivate_key)
{
$pivate_key = '-----BEGIN PRIVATE KEY-----'."\n".$pivate_key."\n".'-----END PRIVATE KEY-----';
$pi_key = openssl_pkey_get_private($pivate_key);
$crypto = '';
foreach (str_split($data, 117) as $chunk) {
openssl_private_encrypt($chunk, $encryptData, $pi_key);
$crypto .= $encryptData;
}
return base64_encode($crypto);
}
3、请求支付接口
//支付接口,一般都是post请求,而且是已json的形式传参
$url = 'https://xxx.com/api/pay';
$client = new Client();
$r = $client->request('POST', $url, [
'json' => array_merge($param, ['sign' => $sign]) //把接口需要的参数和获得到的json合并到一个数组
]);
//获取接口返回结果
$res = json_decode($r->getBody()->getContents());
//你的判断和业务操作
``