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