1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-07-20 15:06:39 +08:00

更新H5支付方式

This commit is contained in:
xiaochong0302 2020-12-02 10:58:09 +08:00
parent 0217ae162d
commit 698b6028c2
10 changed files with 60 additions and 50 deletions

View File

@ -13,6 +13,7 @@ class Setting extends Service
{
$alipay = $this->getSettings('pay.alipay');
$alipay['return_url'] = $alipay['return_url'] ?: kg_full_url(['for' => 'home.alipay_callback']);
$alipay['notify_url'] = $alipay['notify_url'] ?: kg_full_url(['for' => 'home.alipay_notify']);
return $alipay;
@ -22,6 +23,7 @@ class Setting extends Service
{
$wxpay = $this->getSettings('pay.wxpay');
$wxpay['return_url'] = $wxpay['return_url'] ?: kg_full_url(['for' => 'home.wxpay_callback']);
$wxpay['notify_url'] = $wxpay['notify_url'] ?: kg_full_url(['for' => 'home.wxpay_notify']);
return $wxpay;

View File

@ -24,6 +24,12 @@
<input class="layui-input" type="text" name="notify_url" value="{{ alipay.notify_url }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Return Url</label>
<div class="layui-input-block">
<input class="layui-input" type="text" name="return_url" value="{{ alipay.return_url }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<div class="layui-input-block">

View File

@ -30,6 +30,12 @@
<input class="layui-input" type="text" name="notify_url" value="{{ wxpay.notify_url }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Return Url</label>
<div class="layui-input-block">
<input class="layui-input" type="text" name="return_url" value="{{ wxpay.return_url }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<div class="layui-input-block">

View File

@ -25,26 +25,6 @@ class TradeController extends Controller
return $this->jsonSuccess(['trade' => $trade]);
}
/**
* @Get("/h5/pay", name="api.trade.h5_pay")
*/
public function h5PayAction()
{
$sn = $this->request->getQuery('sn', 'string');
$service = new TradeService();
$response = $service->h5Pay($sn);
if (!$response) {
echo "H5支付跳转失败请回退重试";
}
$response->send();
exit();
}
/**
* @Post("/h5/create", name="api.trade.h5_create")
*/
@ -52,13 +32,9 @@ class TradeController extends Controller
{
$service = new TradeService();
$trade = $service->createH5Trade();
$content = $service->createH5Trade();
$service = new TradeInfoService();
$trade = $service->handle($trade->sn);
return $this->jsonSuccess(['trade' => $trade]);
return $this->jsonSuccess($content);
}
/**

View File

@ -17,23 +17,6 @@ class Trade extends Service
use OrderTrait;
use TradeTrait;
public function h5Pay($sn)
{
$trade = $this->checkTradeBySn($sn);
$response = null;
if ($trade->channel == TradeModel::CHANNEL_ALIPAY) {
$alipay = new Alipay();
$response = $alipay->wap($trade);
} elseif ($trade->channel == TradeModel::CHANNEL_WXPAY) {
$wxpay = new Wxpay();
$response = $wxpay->wap($trade);
}
return $response;
}
public function createH5Trade()
{
$post = $this->request->getPost();
@ -62,7 +45,24 @@ class Trade extends Service
$trade->create();
return $trade;
$redirect = '';
if ($trade->channel == TradeModel::CHANNEL_ALIPAY) {
$alipay = new Alipay();
$response = $alipay->wap($trade);
$redirect = $response ? $response->getTargetUrl() : '';
} elseif ($trade->channel == TradeModel::CHANNEL_WXPAY) {
$wxpay = new Wxpay();
$response = $wxpay->wap($trade);
$redirect = $response ? $response->getTargetUrl() : '';
}
$payment = ['redirect' => $redirect];
return [
'trade' => $trade,
'payment' => $payment,
];
}
public function createMpTrade()

View File

@ -75,6 +75,22 @@ class PublicController extends \Phalcon\Mvc\Controller
return $this->jsonSuccess(['token' => $token]);
}
/**
* @Get("/alipay/callback", name="home.alipay_callback")
*/
public function alipayCallbackAction()
{
return $this->response->redirect('/h5/#/pages/uc/orders', true);
}
/**
* @Get("/wxpay/callback", name="home.wxpay_callback")
*/
public function wxpayCallbackAction()
{
return $this->response->redirect('/h5/#/pages/uc/orders', true);
}
/**
* @Post("/alipay/notify", name="home.alipay_notify")
*/

View File

@ -99,6 +99,7 @@ class Alipay extends PayService
'out_trade_no' => $trade->sn,
'total_amount' => $trade->amount,
'subject' => $trade->subject,
'http_method' => 'GET',
]);
} catch (\Exception $e) {

View File

@ -47,6 +47,7 @@ class AlipayGateway extends Service
'alipay_root_cert' => config_path('alipay/alipayRootCert.crt'), // 支付宝根证书
'app_cert_public_key' => config_path('alipay/appCertPublicKey.crt'), // 应用公钥证书
'notify_url' => $this->settings['notify_url'],
'return_url' => $this->settings['return_url'],
'log' => [
'file' => log_path('alipay.log'),
'level' => $level,

View File

@ -6,6 +6,7 @@ use App\Models\Refund as RefundModel;
use App\Models\Trade as TradeModel;
use App\Repos\Trade as TradeRepo;
use App\Services\Pay as PayService;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
use Yansongda\Pay\Gateways\Wechat;
use Yansongda\Pay\Log;
@ -90,7 +91,7 @@ class Wxpay extends PayService
* wap支付
*
* @param TradeModel $trade
* @return Response|bool
* @return RedirectResponse|bool
*/
public function wap(TradeModel $trade)
{
@ -102,11 +103,6 @@ class Wxpay extends PayService
'body' => $trade->subject,
]);
/**
* 微信H5支付会检查Referer构造Referer头信息
*/
$result->headers->set('Referer', kg_site_url());
} catch (\Exception $e) {
Log::error('Wxpay Wap Exception', [

View File

@ -21,6 +21,11 @@ class WxpayGateway extends Service
$this->settings = array_merge($defaults, $options);
}
public function setReturnUrl($returnUrl)
{
$this->settings['return_url'] = $returnUrl;
}
public function setNotifyUrl($notifyUrl)
{
$this->settings['notify_url'] = $notifyUrl;
@ -42,6 +47,7 @@ class WxpayGateway extends Service
'mch_id' => $this->settings['mch_id'],
'key' => $this->settings['key'],
'notify_url' => $this->settings['notify_url'],
'return_url' => $this->settings['return_url'],
'cert_client' => config_path('wxpay/apiclient_cert.pem'),
'cert_key' => config_path('wxpay/apiclient_key.pem'),
'log' => [