mirror of https://github.com/assimon/dujiaoka.git
增加TRX、ETH、USDT-ERC20、USDC-ERC20等支付方式
This commit is contained in:
parent
abc96808a8
commit
d0a3914319
|
@ -0,0 +1,102 @@
|
|||
<?php
|
||||
/**
|
||||
* The file was created by LightCountry.
|
||||
*
|
||||
* @author https://github.com/LightCountry
|
||||
* @copyright https://github.com/LightCountry
|
||||
* @link https://github.com/LightCountry/TokenPay
|
||||
*/
|
||||
|
||||
namespace App\Http\Controllers\Pay;
|
||||
|
||||
|
||||
use App\Exceptions\RuleValidationException;
|
||||
use App\Http\Controllers\PayController;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class TokenPayController extends PayController
|
||||
{
|
||||
public function gateway(string $payway, string $orderSN)
|
||||
{
|
||||
try {
|
||||
// 加载网关
|
||||
$this->loadGateWay($orderSN, $payway);
|
||||
//构造要请求的参数数组,无需改动
|
||||
$parameter = [
|
||||
"ActualAmount" => (float)$this->order->actual_price,//原价
|
||||
"OutOrderId" => $this->order->order_sn,
|
||||
"OrderUserKey" => $this->order->email,
|
||||
"Currency" => $this->payGateway->merchant_id,
|
||||
'RedirectUrl' => route('tokenpay-return', ['order_id' => $this->order->order_sn]),
|
||||
'NotifyUrl' => url($this->payGateway->pay_handleroute . '/notify_url'),
|
||||
];
|
||||
$parameter['Signature'] = $this->VerifySign($parameter, $this->payGateway->merchant_key);
|
||||
$client = new Client([
|
||||
'headers' => [ 'Content-Type' => 'application/json' ]
|
||||
]);
|
||||
$response = $client->post($this->payGateway->merchant_pem.'/CreateOrder', ['body' => json_encode($parameter)]);
|
||||
$body = json_decode($response->getBody()->getContents(), true);
|
||||
if (!isset($body['success']) || $body['success'] != true) {
|
||||
return $this->err(__('dujiaoka.prompt.abnormal_payment_channel') . $body['message']);
|
||||
}
|
||||
return redirect()->away($body['data']);
|
||||
} catch (RuleValidationException $exception) {
|
||||
} catch (GuzzleException $exception) {
|
||||
return $this->err($exception->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private function VerifySign(array $parameter, string $signKey)
|
||||
{
|
||||
ksort($parameter);
|
||||
reset($parameter); //内部指针指向数组中的第一个元素
|
||||
$sign = '';
|
||||
$urls = '';
|
||||
foreach ($parameter as $key => $val) {
|
||||
if ($key != 'Signature') {
|
||||
if ($sign != '') {
|
||||
$sign .= "&";
|
||||
$urls .= "&";
|
||||
}
|
||||
$sign .= "$key=$val"; //拼接为url参数形式
|
||||
$urls .= "$key=" . urlencode($val); //拼接为url参数形式
|
||||
}
|
||||
}
|
||||
$sign = md5($sign . $signKey);//密码追加进入开始MD5签名
|
||||
return $sign;
|
||||
}
|
||||
|
||||
public function notifyUrl(Request $request)
|
||||
{
|
||||
$data = $request->all();
|
||||
$order = $this->orderService->detailOrderSN($data['OutOrderId']);
|
||||
if (!$order) {
|
||||
return 'fail';
|
||||
}
|
||||
$payGateway = $this->payService->detail($order->pay_id);
|
||||
if (!$payGateway) {
|
||||
return 'fail';
|
||||
}
|
||||
//合法的数据
|
||||
$signature = $this->VerifySign($data, $payGateway->merchant_key);
|
||||
if ($data['Signature'] != $signature) { //不合法的数据
|
||||
return 'fail'; //返回失败 继续补单
|
||||
} else {
|
||||
//合法的数据
|
||||
//业务处理
|
||||
$this->orderProcessService->completedOrder($data['OutOrderId'], $data['ActualAmount'], $data['Id']);
|
||||
return 'ok';
|
||||
}
|
||||
}
|
||||
|
||||
public function returnUrl(Request $request)
|
||||
{
|
||||
$oid = $request->get('order_id');
|
||||
// 异步通知还没到就跳转了,所以这里休眠2秒
|
||||
sleep(2);
|
||||
return redirect(url('detail-order-sn', ['orderSN' => $oid]));
|
||||
}
|
||||
|
||||
}
|
|
@ -483,6 +483,11 @@ INSERT INTO `pays` VALUES (20, 'V 免签微信', 'vwx', 1, 1, 'V 免签通讯密
|
|||
INSERT INTO `pays` VALUES (21, 'Stripe[微信支付宝]', 'stripe', 1, 1, 'pk开头的可发布密钥', NULL, 'sk开头的密钥', 'pay/stripe', 1, '2020-10-29 13:15:56', '2020-10-29 13:18:29', NULL);
|
||||
INSERT INTO `pays` VALUES (22, 'Coinbase[加密货币]', 'coinbase', 1, 3, '费率', 'API密钥', '共享密钥', 'pay/coinbase', 0, '2021-08-15 13:15:56', '2021-10-12 13:15:56', NULL);
|
||||
INSERT INTO `pays` VALUES (23, 'Epusdt[trc20]', 'epusdt', 1, 3, 'API密钥', '不填即可', 'api请求地址', 'pay/epusdt', 0, '2022-03-22 13:15:56', '2022-03-22 13:15:56', NULL);
|
||||
INSERT INTO `pays` VALUES (24,'TRX', 'tokenpay-trx', 1, 3, 'TRX', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL);
|
||||
INSERT INTO `pays` VALUES (25,'USDT-TRC20', 'tokenpay-usdt-trc', 1, 3, 'USDT_TRC20', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL);
|
||||
INSERT INTO `pays` VALUES (26,'ETH', 'tokenpay-eth', 1, 3, 'ETH', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL);
|
||||
INSERT INTO `pays` VALUES (27,'USDT-ERC20', 'tokenpay-usdt-erc', 1, 3, 'USDT_ERC20', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL);
|
||||
INSERT INTO `pays` VALUES (28,'USDC-ERC20', 'tokenpay-usdc-erc', 1, 3, 'USDC_ERC20', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL);
|
||||
|
||||
-- ----------------------------
|
||||
COMMIT;
|
||||
|
|
|
@ -52,5 +52,9 @@ Route::group(['prefix' => 'pay', 'namespace' => 'Pay', 'middleware' => ['dujiaok
|
|||
Route::get('epusdt/{payway}/{orderSN}', 'EpusdtController@gateway');
|
||||
Route::post('epusdt/notify_url', 'EpusdtController@notifyUrl');
|
||||
Route::get('epusdt/return_url', 'EpusdtController@returnUrl')->name('epusdt-return');
|
||||
// tokenpay
|
||||
Route::get('tokenpay/{payway}/{orderSN}', 'TokenPayController@gateway');
|
||||
Route::post('tokenpay/notify_url', 'TokenPayController@notifyUrl');
|
||||
Route::get('tokenpay/return_url', 'TokenPayController@returnUrl')->name('tokenpay-return');
|
||||
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue