jh-admin/addon/aliapp/model/AuthNotify.php

279 lines
9.8 KiB
PHP

<?php
/**
* SAAS应用系统 --- 十年开发经验汇集巨献!
* ==========================================================
* Copy right 2020-2050 成都众联思索科技有限公司,保留所有权利。
* ----------------------------------------------------------
* 官方网址: https://www.zoomtk.com
* 这不是自由软件!未经允许不得用于商业目或程序代码摘取及修改。
* 任何企业和个人未经允许对程序代码以任何形式任何目的再发布传播。
* 唯一发布渠道www.zoomtk.com;非官方渠道统一视为侵权行为。
* ==========================================================
*/
namespace addon\aliapp\model;
use app\model\system\Site;
use think\Exception;
use think\facade\Db;
class AuthNotify
{
/***
* 服务订购
* @param $param
* @return void
*/
public function Notify($param = [])
{
$rsaCheck = $this->rsaCheck($param);
if ($rsaCheck && isset($param['notify_type'])) {
switch ($param['notify_type']) {
case 'alipay.service.check':
echo 'success';
break;
case 'servicemarket_order_notify': //服务订单通知
$this->servicemarketOrderNotify($param);
break;
case 'open_app_auth_notify': //授权通知
$this->openAppAuthnotify($param);
break;
}
}
}
/***
* 授权通知处理
* @param $param
*/
public function openAppAuthnotify($param)
{
$authInfo = json_decode($param['biz_content'], true);
$detail = $authInfo['detail'];
$user_id = $detail['user_id'];
$data = [
'original_id' => $user_id,
'type' => 'aliapp',
'auth_value' => json_encode($detail),
'update_time' => time(),
];
$where = [
['apps_id', '=', $detail['auth_app_id']]
];
Db::name('cloud_order')->where($where)->update($data);
if (isset($param['status']) && $param['status'] == 'execute_auth') {
$cloudOrder = Db::name('cloud_order')->where($where)->field('site_id,ag_site_id')->find();
if ($cloudOrder) {
$this->setAlipayConfig($cloudOrder['site_id'], $cloudOrder['ag_site_id'], $detail);
} else if (isset($authInfo['notify_context']['trigger_context']['out_biz_no'])) { //小程序新注册授权
$out_biz_no = $authInfo['notify_context']['trigger_context']['out_biz_no'] ?? '';
if ($out_biz_no) {
$bw = [
'business_code' => $out_biz_no,
'app_type' => 'aliapp',
];
$applet = Db::name('applet_reg')->where($bw)->field('site_id,ag_site_id')->find();
if ($applet) {
$this->setAlipayConfig($applet['site_id'], $applet['ag_site_id'], $detail);
}
}
}
}
echo 'success';
}
/***
* 用户小程序订购
*/
public function servicemarketOrderNotify($param)
{
$user_id = $param['merchant_pid'];
$site_id = '';
$ag_site_id = 1;
if (isset($param['isv_ticket'])) {
$reg = model('applet_reg')->getInfo(['business_code' => $param['isv_ticket'], 'app_type' => 'aliapp'], 'site_id,ag_site_id,contact_phone');
if ($reg) {
$site_id = $reg['site_id'];
$ag_site_id = $reg['ag_site_id'];
if (!isset($param['phone'])) {
$param['phone'] = $reg['contact_phone'];
}
}
$param['ag_site_id'] = $ag_site_id;
$this->upDateMinireg($param);
}
$data = [
'site_id' => $site_id,
'ag_site_id' => $ag_site_id,
'goods_name' => $param['title'],
'cloud_goods_id' => $param['item_code'],
'order_id' => $param['commodity_order_id'],
'third_order_id' => $param['commodity_order_id'],
'original_id' => $user_id,
'type' => 'aliapp',
'pay_status' => 1,
'money' => $param['total_price'],
'contact_name' => $param['contactor'],
'mobile' => $param['phone'],
'raw_data' => json_encode($param),
'update_time' => time(),
'apps_id' => $param['consumer_miniAppId'],
];
$where = [
'original_id' => $user_id,
'third_order_id' => $param['commodity_order_id'],
];
try {
if (!$site_id) {
unset($data['site_id']);
if ($data['money'] > 0) {
$data['is_try'] = 0;
} else {
$data['is_try'] = 1;
$data['expire_time'] = $param['period_day']??7;
}
$shopInfo = $this->createShop($data); //创建店铺
if ($shopInfo['data']['code'] == 0) {
$data['site_id'] = $shopInfo['data']['data'];
} else {
$data['site_id'] = Db::name('site')->where(['username' => $data['mobile']])->value('site_id');
}
}
$info = Db::name('cloud_order')->where($where)->find();
if ($info) {
Db::name('cloud_order')->where($where)->update($data);
} else {
$data['create_time'] = time();
Db::name('cloud_order')->insert($data);
}
echo 'success';
} catch (Exception $e) {
echo 'success';
}
}
/***
* 更新注册信息
* @param $param
* @return void
*/
public function upDateMinireg($param)
{
if (isset($param['isv_ticket'])) {
try {
$data['original_id'] = $param['merchant_pid'];
$data['appid'] = $param['consumer_miniAppId'];
$data['app_type'] = 'aliapp';
$data['create_time'] = strtotime($param['timestamp']);
$data['update_time'] = time();
$data['status'] = 'SUCCESS';
$data['reg_fee'] = model('website')->getValue(['site_id' => $param['ag_site_id']], 'appreg_rate');
model('applet_reg')->update($data, ['business_code' => $param['isv_ticket'], 'app_type' => 'aliapp']);
} catch (Exception $e) {
}
}
}
/***
* 设置站点授权信息
* @param $site_id
* @param $ag_site_id
* @param $detail
* @return int
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function setAlipayConfig($site_id, $ag_site_id = 0, $detail)
{
$paydata = [
'line_type' => 'auth',
'app_type' => 'aliapp',
'site_id' => $site_id,
'ag_site_id' => $ag_site_id,
'appid' => $detail['auth_app_id'],
'appsecret' => '',
'token' => '',
'app_name' => '',
'head_img' => '',
'qrcode' => '',
'account' => $detail['user_id'],
'alipay_public' => '',
'private_key' => '',
'app_auth_token' => $detail['app_auth_token'],
'app_refresh_token' => $detail['app_refresh_token'],
'app_original' => $detail['user_id'],
'original_values' => $detail,
];
if ($site_id) {
$minapp = new Config();
$minapp->setAlipayConfig($detail['auth_app_id'], $paydata, $site_id, $paydata['app_original']);
event('MiniappAuthInfo', $paydata);
}
return 1;
}
/***
* 云订单创建店铺
* @param $data
* @return array
*/
public function createShop($data)
{
//店铺信息
$shop_data = [
'site_name' => $data['contact_name'], //店铺名称
'contacts_name' => $data['contact_name'], //联系人
'contacts_mobile' => $data['mobile'], //联系电话
'agent_id' => $data['ag_site_id'], //所属代理
'group_id' => 1,
'expire_time' => $data['expire_time']??0,
'fee_commission' => 2,
'is_try' => $data['is_try'], //是否体验用户
];
$username = $data['mobile'] ?? $data['original_id'];
$mobile='';
if (preg_match("/^1[345789]\d{9}$/", $data['mobile'])) {
$_see_password =substr($data['mobile'], -6);
$mobile=$data['mobile'];
$password = data_md5($_see_password);
} else {
$_see_password ='888888';
$password = data_md5($_see_password);
}
$user_info = [
'username' => $username,
'password' => $password,
];
$site_model = new Site();
$result = $site_model->addSite($shop_data, $user_info, false);
if ($result['code'] == 0) {
$log = array(
"uid" => 0,
"username" => $username,
"site_id" => $data['ag_site_id'],
"url" => '',
"ip" => request()->ip(),
"data" => json_encode($shop_data),
"action_name" => '云市场自动注册店铺',
"create_time" => time(),
);
model("user_log")->add($log);
$user_info['password']=$_see_password;
$user_info['mobile']=$mobile;
event('AlipayServicemarketAddSite',$user_info);
}
return success('0', '注册成功', $result);
}
public function rsaCheck($param)
{
$payModel = new MinCode();
$res = $payModel->verifySgin($param);
return $res;
}
}