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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|