|
@@ -4,6 +4,7 @@ namespace App\Libs\Pay\Merchants;
|
|
|
|
|
|
require_once dirname(__FILE__) . '../../../AliApp/aop/AopClient.php';
|
|
|
require_once dirname(__FILE__) . '../../../AliApp/aop/request/AlipayTradeWapPayRequest.php';
|
|
|
+require_once dirname(__FILE__) . '../../../AliApp/aop/request/AlipayTradeAppPayRequest.php';
|
|
|
|
|
|
class AliPay implements PayMerchantInterface
|
|
|
{
|
|
@@ -33,15 +34,61 @@ class AliPay implements PayMerchantInterface
|
|
|
|
|
|
public function send(array $data)
|
|
|
{
|
|
|
- $return_url = $data['return_url'];
|
|
|
- unset($data['return_url']);
|
|
|
+ $type = $data['type'];
|
|
|
+ $params = [
|
|
|
+ 'body' => $data['body'],
|
|
|
+ 'subject' => $data['subject'],
|
|
|
+ 'out_trade_no' => $data['out_trade_no'],
|
|
|
+ 'timeout_express' => $data['timeout_express'],
|
|
|
+ 'total_amount' => $data['total_amount'],
|
|
|
+ 'product_code' => 'QUICK_WAP_WAY',
|
|
|
+ ];
|
|
|
+ switch ($type) {
|
|
|
+ case 'App':
|
|
|
+ return $this->AlipayTradeAppPayRequest($data);
|
|
|
+ break;
|
|
|
+ case 'Wap':
|
|
|
+ $return_url = $data['return_url'];
|
|
|
+ return $this->AlipayTradeWapPayRequest($params, $return_url);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private function AlipayTradeWapPayRequest(array $data, $return_url)
|
|
|
+ {
|
|
|
$request = new \AlipayTradeWapPayRequest();
|
|
|
$request->setBizContent(json_encode($data));
|
|
|
$request->setNotifyUrl(env('ALI_PAY_CALL_BACK'));
|
|
|
$request->setReturnUrl($return_url);
|
|
|
- $result = $this->app->pageExecute($request);
|
|
|
- return $result;
|
|
|
+ return $this->app->pageExecute($request);
|
|
|
+ }
|
|
|
+
|
|
|
+ private function AlipayTradeAppPayRequest(array $data)
|
|
|
+ {
|
|
|
+ $this->app->postCharset = 'GBK';
|
|
|
+ $this->app->format = 'json';
|
|
|
+ $request = new \AlipayTradeAppPayRequest();
|
|
|
+ $request->setBizContent(json_encode($data));
|
|
|
+ $request->setNotifyUrl(env('ALI_PAY_CALL_BACK'));
|
|
|
+ $result = $this->app->sdkExecute($request);
|
|
|
+ dd($result);
|
|
|
+ $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
|
|
|
+ $resultCode = $result->$responseNode->code;
|
|
|
+ if (!empty($resultCode) && $resultCode == 10000) {
|
|
|
+ return [
|
|
|
+ 'out_trade_no' => $result->$responseNode->out_trade_no,
|
|
|
+ 'trade_no' => $result->$responseNode->trade_no,
|
|
|
+ 'total_amount' => $result->$responseNode->total_amount,
|
|
|
+ 'seller_id' => $result->$responseNode->seller_id,
|
|
|
+ 'merchant_order_no' => $result->$responseNode->merchant_order_no,
|
|
|
+ 'sign' => $result->sign,
|
|
|
+ ];
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
public function notify(array $data)
|
|
|
{
|
|
|
return $this->app->rsaCheckV1($data, $this->rsaPublicKeyFilePath, self::SIGN_TYPE);
|