admin/app/payment/controllers/JueqiController.php

201 lines
6.2 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\payment\controllers;
use app\common\components\BaseController;
use app\common\helpers\Url;
use app\common\models\AccountWechats;
use app\common\services\Pay;
use app\payment\PaymentController;
use Yunshop\CloudPay\services\CloudPayNotifyService;
class JueqiController extends PaymentController
{
private $data = [];
private $orderSn = '';
public function preAction()
{
parent::preAction();
if (empty(\YunShop::app()->uniacid)) {
$res = $this->getPost();
if($res === true){
\Setting::$uniqueAccountId = \YunShop::app()->uniacid = request()->input('uniacid');
AccountWechats::setConfig(AccountWechats::getAccountByUniacid(\YunShop::app()->uniacid));
}
}
}
/**
* JSAPI 回调
*/
public function notifyUrl()
{
$this->log($this->data);
\Log::info('-------this->data---------',$this->data);
// 微信
if ($this->data['source'] == 1 && $this->data['state'] ==2) {
\Log::info('------验证成功-----');
$data = [
'total_fee' => floatval($this->data['truemoney']),
'out_trade_no' => $this->orderSn,
'trade_no' => $this->data['oid'],
'unit' => 'yuan',
'pay_type' => '云支付',
'pay_type_id' => 33
];
$this->payResutl($data);
\Log::info('----结束----');
echo "success";
} else {
echo "fail";
}
}
/**
* 小程序回调
*/
public function notifyMiniAppUrl()
{
//todo 验证签名在此方法下进行
// $data = $this->getPost();
$this->log($this->data);
// $this->getSignResult($data['paySign']);
if (($this->data['source'] == 1 || $this->data['source'] == 2 || $this->data['source'] == 3) && $this->data['state'] ==2) {
if($this->getQuery() !== true){
echo 'fail';exit();
}
\Log::debug('------验证成功-----');
$data = [
'total_fee' => floatval($this->data['truemoney']),
'out_trade_no' => $this->orderSn,
'trade_no' => $this->data['oid'],
'unit' => 'yuan',
'pay_type' => '云支付',
'pay_type_id' => 33
];
$this->payResutl($data);
\Log::debug('----结束----');
echo "success";
} else {
echo "fail";
}
}
public function getPost()
{
//支付回调接口jsapi支付
//获取xml
$xmlData = file_get_contents('php://input');
libxml_disable_entity_loader(true);
//转换成数组
$rsdata = json_decode(json_encode(simplexml_load_string($xmlData, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
\Log::info($rsdata);
ksort($rsdata);
if(empty($rsdata)){
return true;
}
$this->data = $rsdata;
if($this->data){
$data = explode(':', $this->data['olid']);
$this->orderSn = $data['0'];
\Log::info($data['0']);
\Log::info($data['1']);
\Setting::$uniqueAccountId = \YunShop::app()->uniacid = $data['1'];
}
AccountWechats::setConfig(AccountWechats::getAccountByUniacid(\YunShop::app()->uniacid));
$buff = '';
foreach ($rsdata as $k => $v){
if($k != 'sign'){
$buff .= $k . '=' . $v . '&';
}
}
$stringSignTemp = $buff .'key='.\Setting::get('plugin.jueqi_pay_set.key'); //支付秘钥
\Log::info('-------key---------',\Setting::get('plugin.jueqi_pay_set.key'));
\Log::info('-------stringSignTemp---------',$stringSignTemp);
$sign = strtoupper(md5($stringSignTemp));//生成签名
\Log::info('-------sign---------',$sign);
//验证签名
if($sign == $rsdata['sign']){
return $rsdata;
}else{
\Log::info("data-no:".$xmlData );
exit('FAIL');
}
}
/**
* 成功跳转页面
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function returnUrl()
{
redirect(Url::absoluteApp('home'))->send();
}
public function frontUrl()
{
$trade = \Setting::get('shop.trade');
if (!is_null($trade) && isset($trade['redirect_url']) && !empty($trade['redirect_url'])) {
return redirect($trade['redirect_url'])->send();
}
if (0 == $_GET['state'] && $_GET['errorDetail'] == '成功') {
redirect(Url::absoluteApp('member', ['i' => $_GET['attach']]))->send();
} else {
redirect(Url::absoluteApp('member', ['i' => $_GET['attach']]))->send();
}
}
/**
* 支付日志
*
* @param $post
*/
public function log($data)
{
//访问记录
Pay::payAccessLog();
//保存响应数据
Pay::payResponseDataLog($data['olid'], '云支付', json_encode($data));
}
private function getQuery()
{
//订单查询接口
$stringSignTemp = 'olid='.$this->data['olid'].'&key='.\Setting::get('plugin.jueqi_pay_set.key'); //支付秘钥
$sign = strtoupper(md5($stringSignTemp));//生成签名
$post_data['olid'] = $this->data['olid']; //唯一标识
$post_data['sign'] = $sign; //签名
$url = \Setting::get('plugin.jueqi_pay_set.order_query');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// post数据
curl_setopt($ch, CURLOPT_POST, 1);
// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
//获取xml
libxml_disable_entity_loader(true);
$rsdata = json_decode(json_encode(simplexml_load_string($output, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
if($rsdata['state'] == 2){
return true;
}else{
\Log::debug($rsdata['errordesc']);
}
}
}