efps-version
parent
ed77841a57
commit
6275f594cb
@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Helper\Efps;
|
||||||
|
|
||||||
|
use App\Helper\Log;
|
||||||
|
use App\Helper\StringHelper;
|
||||||
|
use App\Helper\TimeHelper;
|
||||||
|
use GuzzleHttp\Client;
|
||||||
|
use GuzzleHttp\HandlerStack;
|
||||||
|
use Hyperf\Guzzle\CoroutineHandler;
|
||||||
|
|
||||||
|
abstract class AbstractApi
|
||||||
|
{
|
||||||
|
protected static $client;
|
||||||
|
|
||||||
|
protected static function getCommonParams() {
|
||||||
|
$params = [
|
||||||
|
'm_number' => Config::get('app_id'),
|
||||||
|
'timestamp' => TimeHelper::getMillisecond(),
|
||||||
|
'nonce_str' => StringHelper::getRandomString(32),
|
||||||
|
];
|
||||||
|
$params['sign'] = Signer::sign($params);
|
||||||
|
return $params;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function request(AbstractRequest $request) {
|
||||||
|
$params = self::getCommonParams();
|
||||||
|
$params = array_merge($params, $request->getParams());
|
||||||
|
try {
|
||||||
|
Log::info('url:' . $request->getUrl(), [], 'omipay');
|
||||||
|
$response = self::getClient()->post($request->getUrl(), [
|
||||||
|
'query' => $params
|
||||||
|
]);
|
||||||
|
Log::info('request:', $params, 'omipay');
|
||||||
|
$body = (string)$response->getBody();
|
||||||
|
Log::info('response:' . $body, [], 'omipay');
|
||||||
|
$result = json_decode($body, true);
|
||||||
|
if (empty($result)) {
|
||||||
|
$result = [
|
||||||
|
'return_code' => 'FAIL',
|
||||||
|
'error_code' => 'RESPONSE_ERROR',
|
||||||
|
'error_msg' => '返回数据异常',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return new Result($result);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
Log::error('error:' . $e->getMessage(), [], 'omipay');
|
||||||
|
return new Result([
|
||||||
|
'return_code' => 'FAIL',
|
||||||
|
'error_code' => 'NETWORK_ERROR',
|
||||||
|
'error_msg' => '网络错误',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static function getClient(): Client {
|
||||||
|
if (!self::$client) {
|
||||||
|
self::$client = new Client([
|
||||||
|
'base_uri' => Config::get('base_url'),
|
||||||
|
'handler' => HandlerStack::create(new CoroutineHandler()),
|
||||||
|
'headers' => [
|
||||||
|
'Content-Type' => 'application/json',
|
||||||
|
],
|
||||||
|
'timeout' => 5,
|
||||||
|
'swoole' => [
|
||||||
|
'timeout' => 10,
|
||||||
|
'socket_buffer_size' => 1024 * 1024 * 2,
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
return self::$client;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static function getHeaders($sign, $encKey, $timestamp)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'x-efps-sign-no' => '',
|
||||||
|
'x-efps-sign-type' => 'RSAwithSHA256',
|
||||||
|
'x-efps-sign' => $sign,
|
||||||
|
'x-efps-timestamp' => $timestamp,
|
||||||
|
'x-efps-version' => '2.0',
|
||||||
|
'x-efps-enc-key' => $encKey,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Helper\Efps;
|
||||||
|
|
||||||
|
use App\Helper\Efps\Request\UnifiedPaymentRequest;
|
||||||
|
|
||||||
|
class Api
|
||||||
|
{
|
||||||
|
public static function unifiedPayment($outTradeNo, $orderInfo, $payAmount, $notifyUrl, $redirectUrl)
|
||||||
|
{
|
||||||
|
$request = new UnifiedPaymentRequest();
|
||||||
|
$request->setVersion('3.0');
|
||||||
|
$request->setOutTradeNo($outTradeNo);
|
||||||
|
$request->setOrderInfo($orderInfo);
|
||||||
|
$request->setPayAmount($payAmount);
|
||||||
|
$request->setNotifyUrl($notifyUrl);
|
||||||
|
$request->setRedirectUrl($redirectUrl);
|
||||||
|
|
||||||
|
return self::request($request);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Helper\Efps;
|
||||||
|
|
||||||
|
class Config
|
||||||
|
{
|
||||||
|
private static $params = [
|
||||||
|
'app_id' => '',
|
||||||
|
'secret_key' => 'cea6f34bea8640dea91fd8b7a926a9a5',
|
||||||
|
'base_url' => 'https://efps.epylinks.cn',
|
||||||
|
];
|
||||||
|
|
||||||
|
public static function get($key) {
|
||||||
|
return self::$params[$key] ?: null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Helper\Efps;
|
||||||
|
|
||||||
|
class PayNotify
|
||||||
|
{
|
||||||
|
private $params;
|
||||||
|
|
||||||
|
public function __construct($params)
|
||||||
|
{
|
||||||
|
$this->params = $params;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function get($key, $default = null)
|
||||||
|
{
|
||||||
|
return $this->params[$key] ?: $default;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Helper\Efps\Request;
|
||||||
|
|
||||||
|
use App\Helper\Efps\Config;
|
||||||
|
|
||||||
|
class AbstractRequest
|
||||||
|
{
|
||||||
|
protected $uri;
|
||||||
|
|
||||||
|
protected $method;
|
||||||
|
|
||||||
|
protected $_params = [];
|
||||||
|
|
||||||
|
public function getUrl() {
|
||||||
|
return Config::get('base_url') . $this->uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getParams() {
|
||||||
|
return $this->_params;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __get($name)
|
||||||
|
{
|
||||||
|
return $this->_params[$name];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __set($name, $value)
|
||||||
|
{
|
||||||
|
$this->_params[$name] = $value;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,216 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Helper\Efps\Request;
|
||||||
|
|
||||||
|
class UnifiedPaymentRequest extends AbstractRequest
|
||||||
|
{
|
||||||
|
protected $uri = '/api/txs/pay/UnifiedPayment';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $version
|
||||||
|
*/
|
||||||
|
public function setVersion($version): void
|
||||||
|
{
|
||||||
|
$this->version = $version;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $outTradeNo
|
||||||
|
*/
|
||||||
|
public function setOutTradeNo($outTradeNo): void
|
||||||
|
{
|
||||||
|
$this->outTradeNo = $outTradeNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $customerCode
|
||||||
|
*/
|
||||||
|
public function setCustomerCode($customerCode): void
|
||||||
|
{
|
||||||
|
$this->customerCode = $customerCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $clientIp
|
||||||
|
*/
|
||||||
|
public function setClientIp($clientIp): void
|
||||||
|
{
|
||||||
|
$this->clientIp = $clientIp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $orderInfo
|
||||||
|
*/
|
||||||
|
public function setOrderInfo($orderInfo): void
|
||||||
|
{
|
||||||
|
$this->orderInfo = $orderInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $payAmount
|
||||||
|
*/
|
||||||
|
public function setPayAmount($payAmount): void
|
||||||
|
{
|
||||||
|
$this->payAmount = $payAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $payCurrency
|
||||||
|
*/
|
||||||
|
public function setPayCurrency($payCurrency): void
|
||||||
|
{
|
||||||
|
$this->payCurrency = $payCurrency;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $noCreditCards
|
||||||
|
*/
|
||||||
|
public function setNoCreditCards($noCreditCards): void
|
||||||
|
{
|
||||||
|
$this->noCreditCards = $noCreditCards;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $notifyUrl
|
||||||
|
*/
|
||||||
|
public function setNotifyUrl($notifyUrl): void
|
||||||
|
{
|
||||||
|
$this->notifyUrl = $notifyUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $redirectUrl
|
||||||
|
*/
|
||||||
|
public function setRedirectUrl($redirectUrl): void
|
||||||
|
{
|
||||||
|
$this->redirectUrl = $redirectUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $attachData
|
||||||
|
*/
|
||||||
|
public function setAttachData($attachData): void
|
||||||
|
{
|
||||||
|
$this->attachData = $attachData;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $transactionStartTime
|
||||||
|
*/
|
||||||
|
public function setTransactionStartTime($transactionStartTime): void
|
||||||
|
{
|
||||||
|
$this->transactionStartTime = $transactionStartTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $transactionEndTime
|
||||||
|
*/
|
||||||
|
public function setTransactionEndTime($transactionEndTime): void
|
||||||
|
{
|
||||||
|
$this->transactionEndTime = $transactionEndTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $payMethod
|
||||||
|
*/
|
||||||
|
public function setPayMethod($payMethod): void
|
||||||
|
{
|
||||||
|
$this->payMethod = $payMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $subAppId
|
||||||
|
*/
|
||||||
|
public function setSubAppId($subAppId): void
|
||||||
|
{
|
||||||
|
$this->subAppId = $subAppId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $channelMchtNo
|
||||||
|
*/
|
||||||
|
public function setChannelMchtNo($channelMchtNo): void
|
||||||
|
{
|
||||||
|
$this->channelMchtNo = $channelMchtNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $enablePayChannels
|
||||||
|
*/
|
||||||
|
public function setEnablePayChannels($enablePayChannels): void
|
||||||
|
{
|
||||||
|
$this->enablePayChannels = $enablePayChannels;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $instalmentsNum
|
||||||
|
*/
|
||||||
|
public function setInstalmentsNum($instalmentsNum): void
|
||||||
|
{
|
||||||
|
$this->instalmentsNum = $instalmentsNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $storeId
|
||||||
|
*/
|
||||||
|
public function setStoreId($storeId): void
|
||||||
|
{
|
||||||
|
$this->storeId = $storeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $alipayStoreId
|
||||||
|
*/
|
||||||
|
public function setAlipayStoreId($alipayStoreId): void
|
||||||
|
{
|
||||||
|
$this->alipayStoreId = $alipayStoreId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $extUserInfo
|
||||||
|
*/
|
||||||
|
public function setExtUserInfo($extUserInfo): void
|
||||||
|
{
|
||||||
|
$this->extUserInfo = $extUserInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $terminalInfo
|
||||||
|
*/
|
||||||
|
public function setTerminalInfo($terminalInfo): void
|
||||||
|
{
|
||||||
|
$this->terminalInfo = $terminalInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $areaInfo
|
||||||
|
*/
|
||||||
|
public function setAreaInfo($areaInfo): void
|
||||||
|
{
|
||||||
|
$this->areaInfo = $areaInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $extendParams
|
||||||
|
*/
|
||||||
|
public function setExtendParams($extendParams): void
|
||||||
|
{
|
||||||
|
$this->extendParams = $extendParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $coupons
|
||||||
|
*/
|
||||||
|
public function setCoupons($coupons): void
|
||||||
|
{
|
||||||
|
$this->coupons = $coupons;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $nonceStr
|
||||||
|
*/
|
||||||
|
public function setNonceStr($nonceStr): void
|
||||||
|
{
|
||||||
|
$this->nonceStr = $nonceStr;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Helper\Efps;
|
||||||
|
|
||||||
|
class Signer
|
||||||
|
{
|
||||||
|
public static function sign($content, $privateKey)
|
||||||
|
{
|
||||||
|
$privateKey = "-----BEGIN RSA PRIVATE KEY-----\n" .
|
||||||
|
wordwrap($privateKey, 64, "\n", true) .
|
||||||
|
"\n-----END RSA PRIVATE KEY-----";
|
||||||
|
|
||||||
|
$key = openssl_get_privatekey($privateKey);
|
||||||
|
|
||||||
|
// openssl_private_encrypt($content, $signature, $privateKey, OPENSSL_PKCS1_PADDING);
|
||||||
|
openssl_sign($content, $signature, $key, OPENSSL_ALGO_SHA256);
|
||||||
|
openssl_free_key($key);
|
||||||
|
return base64_encode($signature);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function verify($content, $sign, $publicKey){
|
||||||
|
|
||||||
|
$publicKey = "-----BEGIN PUBLIC KEY-----\n" .
|
||||||
|
wordwrap($publicKey, 64, "\n", true) .
|
||||||
|
"\n-----END PUBLIC KEY-----";
|
||||||
|
|
||||||
|
$key = openssl_get_publickey($publicKey);
|
||||||
|
$ok = openssl_verify($content, base64_decode($sign), $key, 'SHA256');
|
||||||
|
openssl_free_key($key);
|
||||||
|
return $ok;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue