135 lines
4.1 KiB
PHP
135 lines
4.1 KiB
PHP
<?php
|
||
|
||
use think\Env;
|
||
|
||
class Xilaixi
|
||
{
|
||
private $pid;
|
||
private $key;
|
||
private string $sign_type = 'MD5';
|
||
private string $mapi_url = 'https://wxjs.980city.com/mapi.php';
|
||
private string $api_url = 'https://wxjs.980city.com/api.php';//https://wxjs.980city.com/api.php?
|
||
|
||
function __construct(){
|
||
$this->pid = Env::get('AllinPay.appId');//平台分配的APPID
|
||
$this->key = Env::get('AllinPay.appId');//平台分配的APPID
|
||
}
|
||
|
||
/**
|
||
* 西来喜支付
|
||
*/
|
||
public function XilaixiPay($date, $type) {
|
||
//6-西来喜微信,7-西来喜支付宝,8-西来喜QQ钱包,9-西来喜云闪付
|
||
if($type == 6){
|
||
$type = 'wxpay';
|
||
}elseif ($type == 7){
|
||
$type = 'alipay';
|
||
}elseif ($type == 8){
|
||
$type = 'qqpay';
|
||
}elseif ($type == 9){
|
||
$type = 'bank';
|
||
}
|
||
//构造要请求的参数数组,无需改动
|
||
$parameter = array(
|
||
"pid" => $this->pid,
|
||
"type" => $type,
|
||
"notify_url" => get_system_config_value("web_site")."/api/Payment/XilaixiPayNotify",
|
||
"return_url" => '',
|
||
"out_trade_no" => $date['order_sn'],//商户订单号,
|
||
"name" => $date['remarke'],//订单标题(不能有空格),
|
||
"money" => $date['money'],
|
||
);
|
||
$param = $this->buildRequestParam($parameter);
|
||
$response = $this->getHttpResponse($this->mapi_url, http_build_query($param));
|
||
return json_decode($response, true);
|
||
}
|
||
|
||
private function buildRequestParam($param){
|
||
$mysign = $this->getSign($param);
|
||
$param['sign'] = $mysign;
|
||
$param['sign_type'] = $this->sign_type;
|
||
return $param;
|
||
}
|
||
|
||
// 计算签名
|
||
private function getSign($param){
|
||
ksort($param);
|
||
reset($param);
|
||
$signstr = '';
|
||
|
||
foreach($param as $k => $v){
|
||
if($k != "sign" && $k != "sign_type" && $v!=''){
|
||
$signstr .= $k.'='.$v.'&';
|
||
}
|
||
}
|
||
$signstr = substr($signstr,0,-1);
|
||
$signstr .= $this->key;
|
||
$sign = md5($signstr);
|
||
return $sign;
|
||
}
|
||
|
||
// 请求外部资源
|
||
private function getHttpResponse($url, $post = false, $timeout = 10){
|
||
$ch = curl_init($url);
|
||
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
|
||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
||
$httpheader[] = "Accept: */*";
|
||
$httpheader[] = "Accept-Language: zh-CN,zh;q=0.8";
|
||
$httpheader[] = "Connection: close";
|
||
curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
|
||
curl_setopt($ch, CURLOPT_HEADER, false);
|
||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||
if($post){
|
||
curl_setopt($ch, CURLOPT_POST, true);
|
||
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
|
||
}
|
||
$response = curl_exec($ch);
|
||
curl_close($ch);
|
||
return $response;
|
||
}
|
||
|
||
// 异步回调验证
|
||
public function verifyNotify(){
|
||
if(empty($_GET)) return false;
|
||
|
||
$sign = $this->getSign($_GET);
|
||
|
||
if($sign === $_GET['sign']){
|
||
$signResult = true;
|
||
}else{
|
||
$signResult = false;
|
||
}
|
||
|
||
return $signResult;
|
||
}
|
||
|
||
|
||
// 查询订单支付状态
|
||
public function orderStatus($trade_no){
|
||
$result = $this->queryOrder($trade_no);
|
||
if($result['status']==1){
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
// 查询订单
|
||
public function queryOrder($trade_no){
|
||
$url = $this->api_url.'?act=order&pid=' . $this->pid . '&key=' . $this->key . '&trade_no=' . $trade_no;
|
||
$response = $this->getHttpResponse($url);
|
||
$arr = json_decode($response, true);
|
||
return $arr;
|
||
}
|
||
|
||
// 订单退款
|
||
public function refund($trade_no, $money){
|
||
$url = $this->api_url.'?act=refund';
|
||
$post = 'pid=' . $this->pid . '&key=' . $this->key . '&trade_no=' . $trade_no . '&money=' . $money;
|
||
$response = $this->getHttpResponse($url, $post);
|
||
$arr = json_decode($response, true);
|
||
return $arr;
|
||
}
|
||
|
||
} |