1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/terry_tan001-payment

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
AliPaymentGenerator.php 4.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Terry Отправлено 5 лет назад 33744aa
<?php
namespace Payment\AliPayment;
use Payment\AliPayment\lib\AliPaymentTradeContentBuilder;
use Payment\AliPayment\lib\AliPaymentTradeRequest;
use Payment\AliPayment\lib\AopClient;
use Payment\CLogFileHandler;
use Payment\Log;
use Payment\PaymentException;
class AliPaymentGenerator
{
private $config;
private $aop;
private $_method = [
'precreate' => 'alipay.trade.precreate',
'wap' => 'alipay.trade.wap.pay',
'app' => 'alipay.trade.app.pay',
];
private $_response = [
'precreate' => 'alipay_trade_precreate_response',
'wap' => 'alipay_trade_wap_pay_response',
'app' => 'alipay_trade_app_pay_response',
];
private $_execute = [
'precreate' => 'execute',
'wap' => 'pageExecute',
'app' => 'sdkExecute'
];
public function __construct($config)
{
$this -> config = new AliPayConfiguration($config);
$this -> aop = new AopClient($this -> config);
}
/**
* @param array $paras
* @return mixed
* @throws PaymentException
*/
public function order(array $paras)
{
$handle = new CLogFileHandler($this -> config->getLogPath().'/');
Log::Init($handle);
// 创建请求builder,设置请求参数
$builder = new AliPaymentTradeContentBuilder();
$builder -> setOutTradeNo($paras['out_trade_no'] ?? '');
$builder -> setTotalAmount(bcdiv($paras['total_amount'],100,2) ?? '');
$builder -> setTimeExpress("5m");
$builder -> setSubject($paras['title'] ?? '');
$builder -> setBody($paras['detail'] ?? '');
$builder -> setGoodsDetailList($paras['goods'] ?? []);
$bizContent = $builder -> getBizContent();
$request = new AliPaymentTradeRequest();
$request->setBizContent ( $bizContent ,$this->_method[$paras['trade_type']]);
$request->setNotifyUrl ( $this->config->getNotifyUrl() );
$execute = $this -> _execute[$paras['trade_type']];
$result = $this -> aop ->$execute($request);
if($paras['trade_type'] !== 'precreate') return $result;
$response_name = $this->_response[$paras['trade_type']];
$response = (array)$result -> $response_name;
if(empty($result) || $response['code'] !== '10000')
{
throw new PaymentException($response['sub_msg']);
}
if(isset($response['qr_code']) == false)
{
throw new PaymentException('未知错误,无法获取二维码地址');
}
return $response['qr_code'];
}
/**
* @param array $input
* @param callable $func
* @return string
*/
function notify(array $input, callable $func)
{
//写入文件日志
$handle = new CLogFileHandler($this -> config->getLogPath().'/notify');
Log::Init($handle);
Log::INFO(json_encode($input));
$result = $this -> aop->rsaCheckV1($input, $this->config->getAlipayPublicKey(), $this->config->getSignType());
if(empty($result))
{
Log::ERROR('异步通知数据校验失败');
return "fail";
}
$func($input);
return "success";
}
/**
* @param string $number
* @return array
* @throws PaymentException
* @throws lib\AliPaymentException
*/
function query(string $number)
{
$builder = new AliPaymentTradeContentBuilder();
$builder -> setOutTradeNo($number);
$biz_content = $builder->getBizContent();
$request = new AliPaymentTradeRequest();
$request -> setBizContent ( $biz_content ,'alipay.trade.query' );
$result = $this -> aop -> execute($request);
$response = (array) $result -> alipay_trade_query_response;
if($response['code'] != '10000')
{
throw new PaymentException($response['sub_msg']);
}
return $response;
}
/**
* @param array $param
* @return \SimpleXMLElement
* @throws PaymentException
* @throws lib\AliPaymentException
*/
public function refund(array $param)
{
$builder = new AliPaymentTradeContentBuilder();
$builder -> setOutTradeNo($param['order_number']);
$builder -> setRefundAmount(bcdiv($param['amount'],100,2));
$builder -> setRefundReason($param['complain']);
$bizContent = $builder->getBizContent();
$request = new AliPaymentTradeRequest();
$request->setBizContent ( $bizContent ,'alipay.trade.refund');
$result = $this -> aop -> execute($request,null,$builder->getAppAuthToken());
$response = $result -> alipay_trade_refund_response;
if( $response -> code != '10000')
{
throw new PaymentException($response->sub_msg);
}
return $response;
}
}

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/terry_tan001-payment.git
git@gitlife.ru:oschina-mirror/terry_tan001-payment.git
oschina-mirror
terry_tan001-payment
terry_tan001-payment
master