85 lines
2.8 KiB
PHP
85 lines
2.8 KiB
PHP
<?php
|
||
|
||
|
||
use think\Env;
|
||
|
||
class TongLian
|
||
{
|
||
/**
|
||
* 通联支付
|
||
*/
|
||
public function TongLianPay($date, $type) {
|
||
$data['appid'] = Env::get('AllinPay.appId');//平台分配的APPID
|
||
$data['body'] = $date['remarke'];//订单标题(不能有空格)
|
||
$data['cusid'] = Env::get('AllinPay.cusid');//平台分配的商户号
|
||
$data['notify_url'] = get_system_config_value("web_site")."/api/Payment/allinpayNotify";//服务器异步通知页面路径
|
||
if($type == 4){//4通联支付宝 5通联微信
|
||
$data['paytype'] = 'A02';//支付方式 支付宝A02
|
||
}elseif($type == 5){
|
||
$data['paytype'] = 'W06';//支付方式 微信小程序固定W06
|
||
}
|
||
$data['randomstr'] = uniqid();//商户自行生成的随机字符串
|
||
$data['remark'] = $type;//订单备注信息
|
||
$data['reqsn'] = $date['order_sn'];//商户订单号
|
||
$data['version'] = '12';//版本号 默认为12
|
||
$data['trxamt'] = strval($date['money']*100);//付款金额 单位为分
|
||
$data['signtype'] = 'RSA';//签名类型 RSA/RSA2/SM2
|
||
$data['sign'] = $this->Sign($data);//签名
|
||
|
||
ksort($data);
|
||
// var_dump($data);die;
|
||
return $data;
|
||
}
|
||
|
||
|
||
//RSA签名
|
||
public function Sign(array $array){
|
||
ksort($array);
|
||
$bufSignSrc = $this->ToUrlParams($array);
|
||
//用商户的RSA私钥进行签名
|
||
$private_key = Env::get('AllinPay.cusRsaPrivateKey');
|
||
$private_key = chunk_split($private_key , 64, "\n");
|
||
$key = "-----BEGIN RSA PRIVATE KEY-----\n".$private_key."-----END RSA PRIVATE KEY-----";
|
||
|
||
if(!openssl_sign($bufSignSrc, $signature, $key)) {
|
||
echo 'sign fail';
|
||
}
|
||
//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
|
||
return base64_encode($signature);
|
||
}
|
||
|
||
//生成键值对字符串
|
||
public function ToUrlParams(array $array)
|
||
{
|
||
$buff = "";
|
||
foreach ($array as $k => $v)
|
||
{
|
||
if($v != "" && !is_array($v)){
|
||
$buff .= $k . "=" . $v . "&";
|
||
}
|
||
}
|
||
|
||
$buff = trim($buff, "&");
|
||
return $buff;
|
||
}
|
||
|
||
/**
|
||
* 校验签名
|
||
* @param array 参数
|
||
* @param unknown_type appkey
|
||
*/
|
||
public function ValidSign(array $array){
|
||
$sign =$array['sign'];
|
||
unset($array['sign']);
|
||
ksort($array);
|
||
|
||
$bufSignSrc = $this->ToUrlParams($array);
|
||
//通联的公钥进行验签
|
||
$public_key = Env::get('AllinPay.allpayrsaPublicKey');
|
||
$public_key = chunk_split($public_key , 64, "\n");
|
||
$key = "-----BEGIN PUBLIC KEY-----\n".$public_key."-----END PUBLIC KEY-----\n";
|
||
$result= openssl_verify($bufSignSrc,base64_decode($sign),$key);
|
||
return $result;
|
||
}
|
||
|
||
} |