|
Server : nginx/1.18.0 System : Linux iZrj9edhd5u5pfsek09o1jZ 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 User : www ( 1000) PHP Version : 5.6.40 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /mnt/web/www.neatabattery.com/vendor/alipay/pagepay/service/ |
<?php
/* *
* 功能:支付宝电脑网站支付
* 版本:2.0
* 修改日期:2017-05-01
* 说明:
* 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
*/
require_once dirname(dirname(dirname ( __FILE__ ))).'/AopSdk.php';
class AlipayTradeService {
//支付宝网关地址
public $gateway_url = "https://openapi.alipay.com/gateway.do";
//支付宝公钥
public $alipay_public_key;
//商户私钥
public $private_key;
//应用id
public $appid;
//编码格式
public $charset = "UTF-8";
public $token = NULL;
//返回数据格式
public $format = "json";
//签名方式
public $signtype = "RSA2";
function __construct($alipay_config){
$this->gateway_url = $alipay_config['gatewayUrl'];
$this->appid = $alipay_config['app_id'];
$this->private_key = $alipay_config['merchant_private_key'];
$this->alipay_public_key = $alipay_config['alipay_public_key'];
$this->charset = $alipay_config['charset'];
$this->signtype=$alipay_config['sign_type'];
if(empty($this->appid)||trim($this->appid)==""){
throw new Exception("appid should not be NULL!");
}
if(empty($this->private_key)||trim($this->private_key)==""){
throw new Exception("private_key should not be NULL!");
}
if(empty($this->alipay_public_key)||trim($this->alipay_public_key)==""){
throw new Exception("alipay_public_key should not be NULL!");
}
if(empty($this->charset)||trim($this->charset)==""){
throw new Exception("charset should not be NULL!");
}
if(empty($this->gateway_url)||trim($this->gateway_url)==""){
throw new Exception("gateway_url should not be NULL!");
}
}
/**
* alipay.trade.page.pay
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @param $return_url 同步跳转地址,公网可以访问
* @param $notify_url 异步通知地址,公网可以访问
* @return $response 支付宝返回的信息
*/
function pagePay($builder,$return_url,$notify_url) {
$biz_content=$builder->getBizContent();
//打印业务参数
$this->writeLog($biz_content);
$request = new AlipayTradePagePayRequest();
$request->setNotifyUrl($notify_url);
$request->setReturnUrl($return_url);
$request->setBizContent ( $biz_content );
// 首先调用支付api
$response = $this->aopclientRequestExecute ($request,true);
// $response = $response->alipay_trade_wap_pay_response;
return $response;
}
/**
* sdkClient
* @param $request 接口请求参数对象。
* @param $ispage 是否是页面接口,电脑网站支付是页面表单接口。
* @return $response 支付宝返回的信息
*/
function aopclientRequestExecute($request,$ispage=false) {
$aop = new AopClient ();
$aop->gatewayUrl = $this->gateway_url;
$aop->appId = $this->appid;
$aop->rsaPrivateKey = $this->private_key;
$aop->alipayrsaPublicKey = $this->alipay_public_key;
$aop->apiVersion ="1.0";
$aop->postCharset = $this->charset;
$aop->format= $this->format;
$aop->signType=$this->signtype;
// 开启页面信息输出
$aop->debugInfo=true;
if($ispage)
{
$result = $aop->pageExecute($request,"post");
echo $result;
}
else
{
$result = $aop->Execute($request);
}
//打开后,将报文写入log文件
$this->writeLog("response: ".var_export($result,true));
return $result;
}
/**
* alipay.trade.query (统一收单线下交易查询)
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @return $response 支付宝返回的信息
*/
function Query($builder){
$biz_content=$builder->getBizContent();
//打印业务参数
$this->writeLog($biz_content);
$request = new AlipayTradeQueryRequest();
$request->setBizContent ( $biz_content );
$response = $this->aopclientRequestExecute ($request);
$response = $response->alipay_trade_query_response;
return $response;
}
/**
* 用于后台验证新版支付宝信息是否正确
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @return $response 支付宝返回的信息
*/
function IsQuery($builder,$admin_pay){
$biz_content=$builder->getBizContent();
//打印业务参数
$this->writeLog($biz_content);
$request = new AlipayTradeQueryRequest();
$request->setBizContent ( $biz_content );
$response = $this->aopclientRequestExecute_new($request,$admin_pay);
if ('支付宝APPID错误!' == $response) {
return $response;
}
if ('支付宝公钥错误!' == $response) {
return $response;
}
$response = $response->alipay_trade_query_response;
if (empty($response)) {
$error = $response->alipay_eco_mycar_parking_parkinglotinfo_create_response;
if (!empty($error)) {
$response = '验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配。';
}
}
return $response;
}
/**
* 用于后台验证新版支付宝信息是否正确
* @param $request 接口请求参数对象。
* @return $response 支付宝返回的信息
*/
function aopclientRequestExecute_new($request,$admin_pay) {
$aop = new AopClient ();
$aop->gatewayUrl = $this->gateway_url;
$aop->appId = $this->appid;
$aop->rsaPrivateKey = $this->private_key;
$aop->alipayrsaPublicKey = $this->alipay_public_key;
$aop->apiVersion ="1.0";
$aop->postCharset = $this->charset;
$aop->format= $this->format;
$aop->signType=$this->signtype;
// 开启页面信息输出
$aop->debugInfo=true;
$result = $aop->Execute($request,'','',$admin_pay);
return $result;
}
/**
* alipay.trade.refund (统一收单交易退款接口)
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @return $response 支付宝返回的信息
*/
function Refund($builder){
$biz_content=$builder->getBizContent();
//打印业务参数
$this->writeLog($biz_content);
$request = new AlipayTradeRefundRequest();
$request->setBizContent ( $biz_content );
$response = $this->aopclientRequestExecute ($request);
$response = $response->alipay_trade_refund_response;
return $response;
}
/**
* alipay.trade.close (统一收单交易关闭接口)
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @return $response 支付宝返回的信息
*/
function Close($builder){
$biz_content=$builder->getBizContent();
//打印业务参数
$this->writeLog($biz_content);
$request = new AlipayTradeCloseRequest();
$request->setBizContent ( $biz_content );
$response = $this->aopclientRequestExecute ($request);
$response = $response->alipay_trade_close_response;
return $response;
}
/**
* 退款查询 alipay.trade.fastpay.refund.query (统一收单交易退款查询)
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @return $response 支付宝返回的信息
*/
function refundQuery($builder){
$biz_content=$builder->getBizContent();
//打印业务参数
$this->writeLog($biz_content);
$request = new AlipayTradeFastpayRefundQueryRequest();
$request->setBizContent ( $biz_content );
$response = $this->aopclientRequestExecute ($request);
return $response;
}
/**
* alipay.data.dataservice.bill.downloadurl.query (查询对账单下载地址)
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @return $response 支付宝返回的信息
*/
function downloadurlQuery($builder){
$biz_content=$builder->getBizContent();
//打印业务参数
$this->writeLog($biz_content);
$request = new alipaydatadataservicebilldownloadurlqueryRequest();
$request->setBizContent ( $biz_content );
$response = $this->aopclientRequestExecute ($request);
$response = $response->alipay_data_dataservice_bill_downloadurl_query_response;
return $response;
}
/**
* 验签方法
* @param $arr 验签支付宝返回的信息,使用支付宝公钥。
* @return boolean
*/
function check($arr){
$aop = new AopClient();
$aop->alipayrsaPublicKey = $this->alipay_public_key;
$result = $aop->rsaCheckV1($arr, $this->alipay_public_key, $this->signtype);
return $result;
}
/**
* 请确保项目文件有可写权限,不然打印不了日志。
*/
function writeLog($text) {
// $text=iconv("GBK", "UTF-8//IGNORE", $text); // 原先就注释
//$text = characet ( $text ); // 原先就注释
// file_put_contents ( dirname ( __FILE__ ).DIRECTORY_SEPARATOR."./../../log.txt", date ( "Y-m-d H:i:s" ) . " " . $text . "\r\n", FILE_APPEND );
}
}
?>