diff --git a/app/Http/Admin/Services/Setting.php b/app/Http/Admin/Services/Setting.php
index d8c97936..b75f2f77 100644
--- a/app/Http/Admin/Services/Setting.php
+++ b/app/Http/Admin/Services/Setting.php
@@ -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;
diff --git a/app/Http/Admin/Views/setting/pay_alipay.volt b/app/Http/Admin/Views/setting/pay_alipay.volt
index aa060e5d..ebc1bf6c 100644
--- a/app/Http/Admin/Views/setting/pay_alipay.volt
+++ b/app/Http/Admin/Views/setting/pay_alipay.volt
@@ -24,6 +24,12 @@
+
+
diff --git a/app/Http/Api/Controllers/TradeController.php b/app/Http/Api/Controllers/TradeController.php
index f9252452..55f6b635 100644
--- a/app/Http/Api/Controllers/TradeController.php
+++ b/app/Http/Api/Controllers/TradeController.php
@@ -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);
}
/**
diff --git a/app/Http/Api/Services/Trade.php b/app/Http/Api/Services/Trade.php
index 74b3f7ae..f9e6d16b 100644
--- a/app/Http/Api/Services/Trade.php
+++ b/app/Http/Api/Services/Trade.php
@@ -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()
diff --git a/app/Http/Home/Controllers/PublicController.php b/app/Http/Home/Controllers/PublicController.php
index 21e28b1e..caf20974 100644
--- a/app/Http/Home/Controllers/PublicController.php
+++ b/app/Http/Home/Controllers/PublicController.php
@@ -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")
*/
diff --git a/app/Services/Pay/Alipay.php b/app/Services/Pay/Alipay.php
index 447acd51..a8498d92 100644
--- a/app/Services/Pay/Alipay.php
+++ b/app/Services/Pay/Alipay.php
@@ -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) {
diff --git a/app/Services/Pay/AlipayGateway.php b/app/Services/Pay/AlipayGateway.php
index e686be2f..171c6870 100644
--- a/app/Services/Pay/AlipayGateway.php
+++ b/app/Services/Pay/AlipayGateway.php
@@ -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,
diff --git a/app/Services/Pay/Wxpay.php b/app/Services/Pay/Wxpay.php
index cf254583..ba94fb0e 100644
--- a/app/Services/Pay/Wxpay.php
+++ b/app/Services/Pay/Wxpay.php
@@ -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', [
diff --git a/app/Services/Pay/WxpayGateway.php b/app/Services/Pay/WxpayGateway.php
index a6c4aa82..00a7800f 100644
--- a/app/Services/Pay/WxpayGateway.php
+++ b/app/Services/Pay/WxpayGateway.php
@@ -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' => [