70 lines
2.1 KiB
PHP
70 lines
2.1 KiB
PHP
<?php
|
|
|
|
|
|
|
|
namespace crmeb\services;
|
|
|
|
|
|
use app\common\model\user\User;
|
|
use app\common\repositories\wechat\WechatUserRepository;
|
|
use think\exception\ValidateException;
|
|
|
|
class CombinePayService
|
|
{
|
|
protected $type;
|
|
protected $options;
|
|
|
|
public function __construct(string $type, array $options)
|
|
{
|
|
$this->type = $type;
|
|
$this->options = $options;
|
|
}
|
|
|
|
public function pay(User $user)
|
|
{
|
|
$method = 'payCombine' . ucfirst($this->type);
|
|
if (!method_exists($this, $method)) {
|
|
throw new ValidateException('不支持该支付方式');
|
|
}
|
|
return $this->{$method}($user);
|
|
}
|
|
|
|
public function payCombineWeixin(User $user)
|
|
{
|
|
$wechatUserRepository = app()->make(WechatUserRepository::class);
|
|
$openId = $wechatUserRepository->idByOpenId($user['wechat_user_id']);
|
|
if (!$openId)
|
|
throw new ValidateException('请关联微信公众号!');
|
|
$config = WechatService::create()->combinePay()->payJs($openId, $this->options);
|
|
return compact('config');
|
|
}
|
|
|
|
public function payCombineWeixinQr(User $user)
|
|
{
|
|
$config = WechatService::create()->combinePay()->payNative($this->options);
|
|
return ['config' => $config['code_url']];
|
|
}
|
|
|
|
public function payCombineRoutine(User $user)
|
|
{
|
|
$wechatUserRepository = app()->make(WechatUserRepository::class);
|
|
$openId = $wechatUserRepository->idByRoutineId($user['wechat_user_id']);
|
|
if (!$openId)
|
|
throw new ValidateException('请关联微信小程序!');
|
|
$config = MiniProgramService::create()->combinePay()->payJs($openId, $this->options);
|
|
return compact('config');
|
|
}
|
|
|
|
public function payCombineH5(User $user)
|
|
{
|
|
$config = WechatService::create()->combinePay()->payH5($this->options, 'Wap');
|
|
return ['config' => ['mweb_url' => $config['h5_url']]];
|
|
}
|
|
|
|
public function payCombineWeixinApp(User $user)
|
|
{
|
|
$config = WechatService::create()->combinePay()->payApp($this->options);
|
|
return compact('config');
|
|
}
|
|
}
|