Files
yusheng-php/extend/TongLian/TongLian.php
2025-08-07 20:21:47 +08:00

85 lines
2.8 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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