217 lines
9.8 KiB
PHP
217 lines
9.8 KiB
PHP
<?php
|
||
namespace addon\aliapp\api\controller;
|
||
use addon\aliapp\model\MinCode;
|
||
use addon\alipay\data\sdk\AopClient;
|
||
use addon\coupon\model\Coupon;
|
||
use app\api\controller\BaseApi;
|
||
use app\model\member\MemberAccount;
|
||
use app\model\member\MemberLevel;
|
||
use app\model\system\Cron;
|
||
use think\facade\Log;
|
||
class AliappMemberCard extends BaseApi
|
||
{
|
||
public $aop;
|
||
|
||
function __construct()
|
||
{
|
||
parent::__construct();
|
||
$config_info = config('alipay.platform');
|
||
// 获取支付宝支付参数(统一支付到平台账户)
|
||
$this->aop = new AopClient();
|
||
$this->aop->alipayrsaPublicKey = $config_info['public_key'] ?? "";
|
||
$this->aop->alipayPublicKey = $config_info['alipay_public_key'] ?? "";
|
||
$this->aop->appId = $config_info["appid"] ?? "";
|
||
$this->aop->rsaPrivateKey = $config_info['private_key'] ?? "";
|
||
$this->aop->alipaySdkVersion = "alipay-sdk-php-20200415";
|
||
$this->aop->apiVersion = '1.0';
|
||
$this->aop->signType = 'RSA2';
|
||
$this->aop->postCharset = 'UTF-8';
|
||
$this->aop->format = 'json';
|
||
}
|
||
|
||
public function userOpencardGet()
|
||
{
|
||
$param = request()->param();
|
||
// $param = json_decode('{"sign":"n1x8rBXsU0Hb\/kX5GT\/OMxKh5Sr3Zslz0a8njra+cU6DzEaeniquoNYCKyY3nz3WZ5TfQsuXQq3ukvoh9SOfXyRKmpbb5nnMmhyqI3d7E\/n7o7\/W+cJAeBIgcpUOlj1BZ0sp5e84IWa7XIaYGCTODa8mRGNJAuVM4JIYt4eQP5ExrcFMY4fzE\/SUicDeOAnA29upUKJoaVQNZ1orpLYe1TzeVHEQImoBG0crt8MeCepTFmNlXJMAeD1AjPsbSUpY8rlj4canR+dkzKzh4uKD+kwxSzfLcOM9nf9bZcNiW2bURJ6ZICzEA7Kuskh1OpJ3GwQ8P1ex5vyrtA1+HM7IoA==","method":"spi.alipay.user.opencard.get","charset":"UTF-8","version":"1.0","utc_timestamp":"1694872947","sign_type":"RSA2","out_serial_no":"2088002141785385|20230916|20230916220137444","biz_card_no":"00000000000000000138","template_id":"20230916000000004853317000300387","user_id":"2088002141785385","user_info":"[{\"OPEN_FORM_FIELD_NAME\":\"胡治金\"},{\"OPEN_FORM_FIELD_GENDER\":\"男\"},{\"OPEN_FORM_FIELD_MOBILE\":\"18982255122\"},{\"OPEN_FORM_FIELD_BIRTHDAY\":\"04-02\"}]"}', true);
|
||
Log::write('支付宝回调通知-会员卡-userOpencardGet:' . json_encode($param, JSON_UNESCAPED_UNICODE));
|
||
$rsaCheck = $this->rsaCheck($param);
|
||
if (!$rsaCheck) {
|
||
$res = [
|
||
'response' => [
|
||
'code' => '40004',
|
||
'msg' => 'Business Failed',
|
||
],
|
||
];
|
||
return json_encode($res, JSON_UNESCAPED_UNICODE);
|
||
}
|
||
$time = time();
|
||
$timestr = date("Y-m-d H:i:s", $time);
|
||
$template = model('member_level')->getInfo([['template_id', '=', $param['template_id']]]);
|
||
$member = model('member')->getInfo([
|
||
['site_id', '=', $template['site_id']],
|
||
['ali_openid', '=', $param['user_id']]
|
||
]);
|
||
$realname = '';
|
||
$sex = 0;
|
||
$mobile = '';
|
||
$birthday = '';
|
||
$user_info = json_decode($param['user_info'], TRUE);
|
||
foreach ($user_info as $itemArray) {
|
||
foreach ($itemArray as $key => $item) {
|
||
switch ($key) {
|
||
case 'OPEN_FORM_FIELD_NAME':
|
||
$realname = $item;
|
||
break;
|
||
case 'OPEN_FORM_FIELD_GENDER':
|
||
switch ($item) {
|
||
case '男':
|
||
$sex = 1;
|
||
break;
|
||
case '女':
|
||
$sex = 2;
|
||
break;
|
||
}
|
||
break;
|
||
case 'OPEN_FORM_FIELD_MOBILE':
|
||
$mobile = $item;
|
||
break;
|
||
case 'OPEN_FORM_FIELD_BIRTHDAY':
|
||
$birthday = strtotime('1970-' . $item);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
$res = [
|
||
'response' => [
|
||
'code' => '10000',
|
||
'msg' => 'Success',
|
||
'card_info' => [
|
||
'biz_card_no' => $param['biz_card_no'],
|
||
'external_card_no' => 10000 + $member['member_id'],
|
||
'open_date' => $timestr,
|
||
'valid_date' => date("Y-m-d H:i:s", $time + 10 * 365 * 24 * 60 * 60),
|
||
'template_id' => $param['template_id'],
|
||
'level' => 'VIP1',
|
||
'point' => $member['point'] + $template['send_point'],
|
||
'balance' => $member['balance'] + $template['send_balance'],
|
||
],
|
||
],
|
||
];
|
||
$upMemberData = [
|
||
'is_member' => 1,
|
||
'realname' => $realname,
|
||
'sex' => $sex,
|
||
'mobile' => $mobile,
|
||
'birthday' => $birthday,
|
||
'ali_card_no' => $param['biz_card_no'],
|
||
];
|
||
$this->CreateMemberLevel($member, $template, $upMemberData);
|
||
return json_encode($res, JSON_UNESCAPED_UNICODE);
|
||
}
|
||
|
||
|
||
public function CreateMemberLevel($member_info, $level_info, $upMemberData)
|
||
{
|
||
|
||
$member_account = new MemberAccount();
|
||
model('member_level_order')->startTrans();
|
||
try {
|
||
$level_info['period_unit'] = 'year';
|
||
// 如果是首次开卡发放开卡礼包
|
||
$count = model('member_level_records')->getCount([['after_level_id', '=', $level_info['level_id']], ['member_id', '=', $member_info['member_id']]]);
|
||
if ($count == 0) {
|
||
//赠送红包
|
||
if ($level_info['send_balance'] > 0) {
|
||
$member_account->addMemberAccount($member_info['site_id'], $member_info['member_id'], 'balance', $level_info['send_balance'], 'memberlevel', '会员开卡得红包' . $level_info['send_balance'], '会员开卡奖励发放');
|
||
}
|
||
//赠送积分
|
||
if ($level_info['send_point'] > 0) {
|
||
$member_account->addMemberAccount($member_info['site_id'], $member_info['member_id'], 'point', $level_info['send_point'], 'memberlevel', '会员开卡得积分' . $level_info['send_point'], '会员开卡奖励发放');
|
||
}
|
||
//给用户发放优惠券
|
||
if (!empty($level_info['send_coupon'])) {
|
||
$coupon_array = explode(',', $level_info['send_coupon']);
|
||
$coupon_model = new Coupon();
|
||
$coupon_array = array_map(function ($value) {
|
||
return ['coupon_type_id' => $value, 'num' => 1];
|
||
}, $coupon_array);
|
||
$coupon_model->giveCoupon($coupon_array, $member_info['site_id'], $member_info['member_id'], 5);
|
||
}
|
||
}
|
||
if ($member_info['member_level'] != $level_info['level_id']) {
|
||
if ($level_info['period_unit'] == 'quarter') {
|
||
$expire_time = strtotime("+3 month");
|
||
} else {
|
||
$expire_time = strtotime("+{1 {$level_info['period_unit']}");
|
||
}
|
||
// 添加会员卡变更记录
|
||
$member_level_model = new MemberLevel();
|
||
$member_level_model->addMemberLevelChangeRecord($member_info['member_id'], $member_info['site_id'], $level_info['level_id'], $expire_time, 'buy', $member_info['member_id'], 'member', $member_info['nickname']);
|
||
} else {
|
||
$old_expire_time = date('Y-m-d', $member_info['level_expire_time']);
|
||
if ($level_info['period_unit'] == 'quarter') {
|
||
$expire_time = strtotime("{$old_expire_time} +3 month");
|
||
} else {
|
||
$expire_time = strtotime("{$old_expire_time} +1} {$level_info['period_unit']}");
|
||
}
|
||
$upMemberData['level_expire_time'] = $expire_time;
|
||
// 更新会员卡过期时间
|
||
model('member')->update($upMemberData, [['member_id', '=', $member_info['member_id']]]);
|
||
$cron = new Cron();
|
||
$cron->deleteCron([['event', '=', 'MemberLevelAutoExpire'], ['relate_id', '=', $member_info['member_id']]]);
|
||
$cron->addCron(1, 0, "会员卡自动过期", "MemberLevelAutoExpire", $expire_time, $member_info['member_id']);
|
||
}
|
||
model('member_level_order')->commit();
|
||
return $this->success();
|
||
} catch (\Exception $e) {
|
||
model('member_level_order')->rollback();
|
||
return $this->error('', $e->getMessage());
|
||
}
|
||
}
|
||
|
||
|
||
|
||
public function testuserOpencardGet()
|
||
{
|
||
|
||
$param = request()->param();
|
||
Log::write('支付宝回调通知-会员卡-userOpencardGet:' . json_encode($param, JSON_UNESCAPED_UNICODE));
|
||
$rsaCheck = $this->rsaCheck($param);
|
||
if (!$rsaCheck) {
|
||
$res = [
|
||
'response' => [
|
||
'code' => '40004',
|
||
'msg' => 'Business Failed',
|
||
],
|
||
];
|
||
// $res["sign"] = $this->aop->generateSign($res, "RSA2");
|
||
return json_encode($res, JSON_UNESCAPED_UNICODE);
|
||
}
|
||
$time = time();
|
||
$timestr = date("Y-m-d H:i:s", $time);
|
||
$res = [
|
||
'response' => [
|
||
'code' => '10000',
|
||
'msg' => 'Success',
|
||
'card_info' => [
|
||
'biz_card_no' => $param['biz_card_no'],
|
||
'external_card_no' => '000001',
|
||
'open_date' => $timestr,
|
||
'valid_date' => date("Y-m-d H:i:s", $time + 10 * 365 * 24 * 60 * 60),
|
||
'template_id' => $param['template_id'],
|
||
'balance' => '124.89'
|
||
],
|
||
],
|
||
];
|
||
// $res["sign"] = $this->aop->generateSign($res, "RSA2");
|
||
|
||
|
||
return json_encode($res, JSON_UNESCAPED_UNICODE);
|
||
}
|
||
public function rsaCheck($param)
|
||
{
|
||
$payModel = new MinCode();
|
||
$res = $payModel->verifySgin($param);
|
||
return $res;
|
||
}
|
||
} |