162 lines
5.0 KiB
PHP
162 lines
5.0 KiB
PHP
<?php
|
|
/**
|
|
* Created by PhpStorm.
|
|
* User: Administrator
|
|
* Date: 2018/11/6
|
|
* Time: 16:59
|
|
*/
|
|
|
|
namespace app\payment\controllers;
|
|
|
|
use app\payment\PaymentController;
|
|
use app\common\helpers\Url;
|
|
use app\common\models\AccountWechats;
|
|
use app\frontend\modules\finance\models\BalanceRecharge;
|
|
use app\common\services\Pay;
|
|
|
|
class PldController extends PaymentController
|
|
{
|
|
private $attach = [];
|
|
|
|
private $pld_proportion = 0;
|
|
|
|
private $balance_proportion = 0;
|
|
public function preAction()
|
|
{
|
|
parent::preAction();
|
|
|
|
if (empty(\YunShop::app()->uniacid)) {
|
|
$this->attach = explode('a', $_GET['OrderID']);
|
|
|
|
\Setting::$uniqueAccountId = \YunShop::app()->uniacid = $this->attach[0];
|
|
|
|
AccountWechats::setConfig(AccountWechats::getAccountByUniacid(\YunShop::app()->uniacid));
|
|
}
|
|
|
|
//PLD币和余额的兑换比例
|
|
$this->pld_proportion = \Setting::get('plugin.pld_pay.pld_proportion') ?:1;
|
|
$this->balance_proportion = \Setting::get('plugin.pld_pay.balance_proportion') ?:1;
|
|
|
|
}
|
|
|
|
//异步充值通知
|
|
public function notifyUrl()
|
|
{
|
|
$parameter = $_GET;
|
|
|
|
\Log::debug('------------PLD异步通知----------------'.$_SERVER['QUERY_STRING']);
|
|
|
|
if(!empty($parameter)){
|
|
if($this->getSignResult($parameter)) {
|
|
$recharge_log = BalanceRecharge::ofOrderSn($this->attach[1])->withoutGlobalScope('member_id')->first();
|
|
if ($recharge_log && $recharge_log->status != 1) {
|
|
$this->log($parameter);
|
|
\Log::info('------PLD验证成功-----');
|
|
$data = [
|
|
'total_fee' => $this->proportionPrice($parameter['Amount']),
|
|
'out_trade_no' => $this->attach[1],
|
|
'trade_no' => 'pld',
|
|
'unit' => 'yuan',
|
|
'pay_type' => 'PLD支付',
|
|
'pay_type_id' => 23,
|
|
|
|
];
|
|
$this->payResutl($data);
|
|
\Log::info('----PLD结束----');
|
|
echo 'ok';
|
|
} else {
|
|
if ($recharge_log && $recharge_log->status == 1) {
|
|
echo 'ok';
|
|
}
|
|
}
|
|
} else {
|
|
//签名验证失败
|
|
echo '签名验证失败';
|
|
}
|
|
}else {
|
|
echo '无参数';
|
|
}
|
|
}
|
|
|
|
//同步充值通知
|
|
public function returnUrl()
|
|
{
|
|
$parameter = $_GET;
|
|
|
|
$this->log($parameter);
|
|
|
|
if(!empty($parameter)){
|
|
if($this->getSignResult($parameter)) {
|
|
$recharge_log = BalanceRecharge::ofOrderSn($this->attach[1])->withoutGlobalScope('member_id')->first();
|
|
if ($recharge_log && $recharge_log->status != 1) {
|
|
\Log::info('------PLD验证成功-----');
|
|
$data = [
|
|
'total_fee' => $this->proportionPrice($parameter['Amount']),
|
|
'out_trade_no' => $this->attach[1],
|
|
'trade_no' => 'pld',
|
|
'unit' => 'yuan',
|
|
'pay_type' => 'PLD支付',
|
|
'pay_type_id' => 23,
|
|
|
|
];
|
|
$this->payResutl($data);
|
|
\Log::info('----PLD结束----');
|
|
redirect(Url::absoluteApp('member', ['i' => \YunShop::app()->uniacid]))->send();
|
|
} else {
|
|
if ($recharge_log && $recharge_log->status == 1) {
|
|
\Log::debug('--------PLD充值已记录------------');
|
|
redirect(Url::absoluteApp('member', ['i' => \YunShop::app()->uniacid]))->send();
|
|
}
|
|
//其他错误
|
|
\Log::debug('----PLD充值记录不存在----');
|
|
}
|
|
} else {
|
|
//签名验证失败
|
|
\Log::debug('----PLD签名验证失败----');
|
|
}
|
|
}else {
|
|
\Log::debug('----参数为空----');
|
|
}
|
|
redirect(Url::absoluteApp('home'))->send();
|
|
}
|
|
|
|
/**
|
|
* 反转充值比例,用于做余额充值金额验证
|
|
* @param $amount int 第三方返回金额
|
|
* @return float
|
|
*/
|
|
protected function proportionPrice($amount)
|
|
{
|
|
$amount = ($amount / $this->pld_proportion) * $this->balance_proportion;
|
|
|
|
return floatval($amount);
|
|
}
|
|
|
|
|
|
/**
|
|
* 签名验证
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function getSignResult($parameter)
|
|
{
|
|
$key = $parameter['OrderID'].$parameter['Amount'].'zhijie';
|
|
|
|
$md5_key = md5(md5($key));
|
|
|
|
return $parameter['Sign'] == $md5_key;
|
|
}
|
|
|
|
/**
|
|
* 支付日志
|
|
*
|
|
* @param $post
|
|
*/
|
|
public function log($data)
|
|
{
|
|
//访问记录
|
|
Pay::payAccessLog();
|
|
//保存响应数据
|
|
Pay::payResponseDataLog($this->attach[1], 'PLD充值支付', json_encode($data));
|
|
}
|
|
} |