You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.2 KiB
143 lines
4.2 KiB
<?php
|
|
|
|
namespace App\AdminSettled\Common;
|
|
|
|
use App\Models\AdminSetting;
|
|
use App\Models\Agent;
|
|
use App\Models\Guide;
|
|
use App\Models\SettledOrder;
|
|
use App\Models\Supplier;
|
|
use EasyWeChat\Factory;
|
|
|
|
/**
|
|
* 入驻支付
|
|
* Class SettledPay
|
|
* @package App\AdminSettled\Common
|
|
*/
|
|
class SettledPay
|
|
{
|
|
/**
|
|
* 获取支付回调JS
|
|
* @param $model
|
|
* @return string
|
|
* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
|
|
* @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
|
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
|
*/
|
|
public function PayJs($model): string
|
|
{
|
|
if ($model instanceof Supplier) {
|
|
$type = 'supplier';
|
|
} else if ($model instanceof Agent) {
|
|
$type = 'agent';
|
|
} else if ($model instanceof Guide) {
|
|
$type = 'guide';
|
|
} else {
|
|
return "Dcat.swal.error('无效的商家类型', null);";
|
|
}
|
|
|
|
$cost = AdminSetting::val("settled_{$type}_cost"); //入驻费
|
|
$pay = $this->payConfig($model, $cost, ['supplier' => 1, 'agent' => 2, 'guide' => 3][$type]);
|
|
|
|
if (empty($pay['code_url'])) {
|
|
if (isset($pay['result_code'], $pay['err_code_des']) && $pay['result_code'] != 'SUCCESS') {
|
|
$msg = $pay['err_code_des'];
|
|
} else {
|
|
$msg = $pay['return_msg'] ?? '获取支付信息失败';
|
|
}
|
|
$js = "Dcat.swal.info('支付:$msg', null);";
|
|
} else {
|
|
$ajax_url = admin_url('is_pay');
|
|
$js = <<<JS
|
|
Dcat.swal.info(
|
|
'<div style="margin-top:1rem;"><div id="qrcode"></div><p style="text-align:center;">入驻费:¥{$cost}元</p></div>',
|
|
'<b style="color:red">请微信扫码支付,请勿关闭页面</b>',
|
|
{
|
|
type: null,
|
|
imageWidth: 240,
|
|
imageHeight: 240,
|
|
animation: false,
|
|
// confirmButtonText: '我已完成支付,刷新',
|
|
showConfirmButton: false,
|
|
allowOutsideClick: false,
|
|
allowEscapeKey: false,
|
|
onOpen: function () {
|
|
$('#qrcode').qrcode({text:'{$pay["code_url"]}', width:240, height:240});
|
|
if (window.timer) {
|
|
clearInterval(window.timer);
|
|
}
|
|
window.timer = setInterval(function () {
|
|
$.ajax({
|
|
url: '$ajax_url',
|
|
data: {
|
|
username: '{$model->username}',
|
|
type: '{$type}',
|
|
},
|
|
success: function (res) {
|
|
if (res == 1) {
|
|
clearInterval(window.timer);
|
|
Dcat.swal.success('支付成功,请联系平台审核!', null, {
|
|
onClose: function () {
|
|
window.location.reload();
|
|
}
|
|
}).then(() => {
|
|
window.location.reload();
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}, 1000);
|
|
}
|
|
});
|
|
JS;
|
|
}
|
|
return $js;
|
|
}
|
|
|
|
/**
|
|
* 获取支付配置
|
|
* @param $model
|
|
* @param $cost
|
|
* @param $user_type
|
|
* @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
|
|
* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
|
|
* @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
|
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
|
*/
|
|
private function PayConfig($model, $cost, $user_type)
|
|
{
|
|
$setting = AdminSetting::val(['payee_appid', 'payee_mchid', 'payee_mchkey']);
|
|
$config = [
|
|
'app_id' => $setting['payee_appid'],
|
|
'mch_id' => $setting['payee_mchid'],
|
|
'key' => $setting['payee_mchkey'],
|
|
'notify_url' => route('wxpay_settled_notify'),
|
|
];
|
|
$app = Factory::payment($config);
|
|
|
|
//生成订单号
|
|
list($micro, $sec) = explode(' ', microtime());
|
|
$micro = str_pad(floor($micro * 1000000), 6, 0, STR_PAD_LEFT);
|
|
$order_no = date('ymdHis', $sec) . $micro . mt_rand(1000, 9999);
|
|
|
|
//保存订单记录
|
|
SettledOrder::insertOrIgnore([
|
|
'order_no' => $order_no,
|
|
'user_type' => $user_type,
|
|
'username' => $model->username,
|
|
'money' => $cost,
|
|
'status' => 0,
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
]);
|
|
|
|
return $app->order->unify([
|
|
'product_id' => $model->id,
|
|
'attach' => $model->username,
|
|
'body' => mb_strcut($model->company_name . ' 入驻易游平台', 0, 127),
|
|
'out_trade_no' => $order_no,
|
|
'total_fee' => round($cost * 100), //支付金额单位为分
|
|
'trade_type' => 'NATIVE', // 请对应换成你的支付方式对应的值类型
|
|
]);
|
|
}
|
|
}
|