jh-admin/addon/aliapp/api/controller/AliappMemberCard.php

217 lines
9.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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;
}
}