fix: update AppID and fix WeChat login with getUserInfo
- Replace old AppID with new wx2deff82b6c422615 - Add packOptions.ignore for docx/xlsx/bmp/temp files - Fix login: call wx.getUserInfo() before getPhoneNumber - Clean up temporary files from project root Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
399
Cppwechat.php
399
Cppwechat.php
@@ -1,399 +0,0 @@
|
||||
<?php
|
||||
namespace app\app\controller;
|
||||
|
||||
use think\Request;
|
||||
use think\Db;
|
||||
|
||||
/**
|
||||
* CPP生长减速预测模型 小程序API
|
||||
*/
|
||||
class Cppwechat extends Base
|
||||
{
|
||||
private $Appid;
|
||||
private $Appsecret;
|
||||
private $TokenKey;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->Appid = 'wx0847525a15342a46';
|
||||
$this->Appsecret = '71cf8c524580ba6b262e6dc52d44da4c';
|
||||
$this->TokenKey = 'ruilai340u20k4';
|
||||
}
|
||||
|
||||
/********************************* 首页 *********************************/
|
||||
public function selectRealtimeInfoList(Request $request)
|
||||
{
|
||||
$post = $request->param();
|
||||
$page = isset($post['page']) && !empty($post['page']) ? $post['page'] : 1;
|
||||
$page_size = isset($post['page_size']) && !empty($post['page_size']) ? $post['page_size'] : 20;
|
||||
|
||||
$res = Db::name('wechat_real_time_info')
|
||||
->field('title_plain,thumbnail,excerpt_plain,url')
|
||||
->order('create_time desc')
|
||||
->paginate($page_size, false, ['page' => $page]);
|
||||
|
||||
$result = array();
|
||||
$result['lists'] = $res->items();
|
||||
$result['lastPage'] = $res->lastPage();
|
||||
$result['currentPage'] = $res->currentPage();
|
||||
$result['erro'] = 0;
|
||||
$result['msg'] = '查询成功';
|
||||
return json($result);
|
||||
}
|
||||
|
||||
/********************************* 计算 *********************************/
|
||||
public function calculate(Request $request)
|
||||
{
|
||||
$post = $request->param();
|
||||
|
||||
if (!isset($post['uid']) || empty($post['uid'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入用户id";
|
||||
return json_encode($result);
|
||||
}
|
||||
if (!isset($post['name']) || empty($post['name'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入姓名";
|
||||
return json_encode($result);
|
||||
}
|
||||
if (!isset($post['bone_age']) || empty($post['bone_age']) || !is_numeric($post['bone_age'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入初诊骨龄或数据格式不对";
|
||||
return json_encode($result);
|
||||
}
|
||||
if (!isset($post['uterus_length']) || empty($post['uterus_length']) || !is_numeric($post['uterus_length'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入初诊子宫长或数据格式不对";
|
||||
return json_encode($result);
|
||||
}
|
||||
if (!isset($post['uterus_width']) || empty($post['uterus_width']) || !is_numeric($post['uterus_width'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入初诊子宫宽或数据格式不对";
|
||||
return json_encode($result);
|
||||
}
|
||||
if (!isset($post['lh_peak']) || empty($post['lh_peak']) || !is_numeric($post['lh_peak'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入LH峰值或数据格式不对";
|
||||
return json_encode($result);
|
||||
}
|
||||
if (!isset($post['fsh_peak']) || empty($post['fsh_peak']) || !is_numeric($post['fsh_peak'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入FSH峰值或数据格式不对";
|
||||
return json_encode($result);
|
||||
}
|
||||
if (!isset($post['fsh_3m']) || empty($post['fsh_3m']) || !is_numeric($post['fsh_3m'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入治疗3月FSH或数据格式不对";
|
||||
return json_encode($result);
|
||||
}
|
||||
if (!isset($post['igf1']) || empty($post['igf1']) || !is_numeric($post['igf1'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入基础IGF-1或数据格式不对";
|
||||
return json_encode($result);
|
||||
}
|
||||
|
||||
// 参数取值
|
||||
$bone_age = floatval($post['bone_age']);
|
||||
$uterus_length = floatval($post['uterus_length']);
|
||||
$uterus_width = floatval($post['uterus_width']);
|
||||
$lh_peak = floatval($post['lh_peak']);
|
||||
$fsh_peak = floatval($post['fsh_peak']);
|
||||
$fsh_3m = floatval($post['fsh_3m']);
|
||||
$igf1 = floatval($post['igf1']);
|
||||
|
||||
// 交互项: 骨龄 x 子宫长
|
||||
$interaction_ba_ul = $bone_age * $uterus_length;
|
||||
// 比值项: LH峰值 / FSH峰值
|
||||
$lh_fsh_ratio = $lh_peak / $fsh_peak;
|
||||
// log(FSH峰值)
|
||||
$log_fsh_peak = log($fsh_peak);
|
||||
|
||||
// 预测模型
|
||||
$logit = -2.8457
|
||||
+ 0.1198 * $interaction_ba_ul
|
||||
+ 1.0411 * $log_fsh_peak
|
||||
- 0.4832 * $fsh_3m
|
||||
- 0.0044 * $igf1
|
||||
+ 0.4207 * $lh_fsh_ratio
|
||||
- 0.8303 * $uterus_width;
|
||||
|
||||
// sigmoid
|
||||
$exp_val = exp($logit);
|
||||
$probability = $exp_val / (1 + $exp_val);
|
||||
|
||||
// 风险分级
|
||||
if ($probability < 0.430) {
|
||||
$risk_level = '低风险';
|
||||
$suggestion = '继续目前GnRHa治疗方案,按常规6个月随访即可,关注身高增长趋势。';
|
||||
} elseif ($probability <= 0.572) {
|
||||
$risk_level = '中风险';
|
||||
$suggestion = '建议缩短随访间隔至3个月,关注GV下降趋势,必要时联合rhGH。';
|
||||
} else {
|
||||
$risk_level = '高风险';
|
||||
$suggestion = '建议每2-3个月密切随访,积极监测生长速率变化,尽早考虑rhGH联合干预。';
|
||||
}
|
||||
|
||||
// 保存记录
|
||||
$data = [];
|
||||
$data['id'] = md5(time() . rand(100000, 999999));
|
||||
$data['uid'] = $post['uid'];
|
||||
$data['name'] = $post['name'];
|
||||
$data['bone_age'] = $bone_age;
|
||||
$data['uterus_length'] = $uterus_length;
|
||||
$data['uterus_width'] = $uterus_width;
|
||||
$data['lh_peak'] = $lh_peak;
|
||||
$data['fsh_peak'] = $fsh_peak;
|
||||
$data['fsh_3m'] = $fsh_3m;
|
||||
$data['igf1'] = $igf1;
|
||||
$data['calculate_result'] = round($probability, 4);
|
||||
$data['risk_level'] = $risk_level;
|
||||
$data['create_time'] = date('Y-m-d H:i:s');
|
||||
|
||||
$res = Db::name('cpp_calculate_record')->insert($data);
|
||||
if ($res === false) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = '计算失败,请重试';
|
||||
return json_encode($result);
|
||||
} else {
|
||||
$result['erro'] = 0;
|
||||
$result['msg'] = '计算成功';
|
||||
$result['calculate_result'] = round($probability, 4);
|
||||
$result['risk_level'] = $risk_level;
|
||||
$result['suggestion'] = $suggestion;
|
||||
return json_encode($result);
|
||||
}
|
||||
}
|
||||
|
||||
/********************************* 记录 *********************************/
|
||||
public function selectRecordList(Request $request)
|
||||
{
|
||||
$post = $request->param();
|
||||
if (!isset($post['uid']) || empty($post['uid'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入用户id";
|
||||
return json_encode($result);
|
||||
}
|
||||
$page = isset($post['page']) && !empty($post['page']) ? $post['page'] : 1;
|
||||
$page_size = isset($post['page_size']) && !empty($post['page_size']) ? $post['page_size'] : 30;
|
||||
|
||||
$res = Db::name('cpp_calculate_record')
|
||||
->field('id,name,bone_age,uterus_length,uterus_width,lh_peak,fsh_peak,fsh_3m,igf1,calculate_result,risk_level,create_time')
|
||||
->where('uid', $post['uid'])
|
||||
->order('create_time desc')
|
||||
->paginate($page_size, false, ['page' => $page]);
|
||||
|
||||
$result = array();
|
||||
$result['lists'] = $res->items();
|
||||
$result['lastPage'] = $res->lastPage();
|
||||
$result['currentPage'] = $res->currentPage();
|
||||
$result['erro'] = 0;
|
||||
$result['msg'] = '查询成功';
|
||||
return json($result);
|
||||
}
|
||||
|
||||
public function deleteRecord(Request $request)
|
||||
{
|
||||
$post = $request->param();
|
||||
if (!isset($post['uid']) || empty($post['uid'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入用户id";
|
||||
return json($result);
|
||||
}
|
||||
if (!isset($post['id']) || empty($post['id'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "请选择要删除的记录";
|
||||
return json($result);
|
||||
}
|
||||
$id = Db::name('cpp_calculate_record')
|
||||
->where('id', $post['id'])
|
||||
->where('uid', $post['uid'])
|
||||
->value('id');
|
||||
if (empty($id)) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = '该记录异常,无法删除';
|
||||
return json($result);
|
||||
}
|
||||
$res = Db::name('cpp_calculate_record')->where('id', $id)->delete();
|
||||
if ($res > 0) {
|
||||
$result['erro'] = 0;
|
||||
$result['msg'] = '删除成功';
|
||||
} else {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = '删除失败';
|
||||
}
|
||||
return json($result);
|
||||
}
|
||||
|
||||
/********************************* 反馈 *********************************/
|
||||
public function submitFeedback(Request $request)
|
||||
{
|
||||
$post = $request->param();
|
||||
if (!isset($post['uid']) || empty($post['uid'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "请先登录";
|
||||
return json_encode($result);
|
||||
}
|
||||
if (!isset($post['content']) || empty(trim($post['content']))) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "请输入反馈内容";
|
||||
return json_encode($result);
|
||||
}
|
||||
$data = [];
|
||||
$data['uid'] = $post['uid'];
|
||||
$data['content'] = trim($post['content']);
|
||||
$data['create_time'] = date('Y-m-d H:i:s');
|
||||
$res = Db::name('cpp_feedback')->insert($data);
|
||||
if ($res) {
|
||||
$result['erro'] = 0;
|
||||
$result['msg'] = '感谢您的反馈';
|
||||
} else {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = '提交失败,请重试';
|
||||
}
|
||||
return json_encode($result);
|
||||
}
|
||||
|
||||
/********************************* 登录 *********************************/
|
||||
public function wechatLogin(Request $request)
|
||||
{
|
||||
$post = $request->param();
|
||||
if (!isset($post['code']) || empty($post['code'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入code";
|
||||
return json_encode($result);
|
||||
}
|
||||
if (!isset($post['encryptedData']) || empty($post['encryptedData'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入encryptedData";
|
||||
return json_encode($result);
|
||||
}
|
||||
if (!isset($post['iv']) || empty($post['iv'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入iv";
|
||||
return json_encode($result);
|
||||
}
|
||||
|
||||
$encryptedData = $post['encryptedData'];
|
||||
$iv = $post['iv'];
|
||||
$code = $post['code'];
|
||||
$URL = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $this->Appid . "&secret=" . $this->Appsecret . "&js_code=$code&grant_type=authorization_code";
|
||||
$apiData = json_decode($this->httpGet($URL), true);
|
||||
|
||||
if (!isset($apiData['errcode'])) {
|
||||
$sessionKey = $apiData['session_key'];
|
||||
$errCode = $this->decryptData($sessionKey, $this->Appid, $encryptedData, $iv, $data);
|
||||
if ($errCode == 0) {
|
||||
$record = json_decode($data, true);
|
||||
$res = $this->saveUseInfor($record);
|
||||
return json_encode($res);
|
||||
} else {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = '解析接口返回数据失败,请重试!';
|
||||
return json_encode($result);
|
||||
}
|
||||
} else {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = $apiData['errmsg'];
|
||||
return json_encode($result);
|
||||
}
|
||||
}
|
||||
|
||||
private function saveUseInfor($record)
|
||||
{
|
||||
$data = array();
|
||||
$data['nickname'] = $record['nickName'];
|
||||
$data['headimg'] = $record['avatarUrl'];
|
||||
|
||||
$rec = Db::name('wechat_user')->field('uid')->where('openid', $record['openId'])->find();
|
||||
|
||||
if (empty($rec)) {
|
||||
$data['openid'] = $record['openId'];
|
||||
$data['create_time'] = date('Y-m-d H:i:s');
|
||||
$res = Db::name('wechat_user')->insertGetId($data);
|
||||
$uid = $res;
|
||||
} else {
|
||||
$res = Db::name('wechat_user')->where('uid', $rec['uid'])->update($data);
|
||||
$uid = $rec['uid'];
|
||||
}
|
||||
if ($res === false) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = '保存信息失败';
|
||||
return $result;
|
||||
} else {
|
||||
$result['erro'] = 0;
|
||||
$result['msg'] = '登录成功';
|
||||
$result['uid'] = $uid;
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
public function getToken(Request $request)
|
||||
{
|
||||
$post = $request->param();
|
||||
if (!isset($post['uid']) || empty($post['uid'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传登录用户id";
|
||||
return json_encode($result);
|
||||
}
|
||||
if (!isset($post['phone']) || empty($post['phone'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传登录用户账号";
|
||||
return json_encode($result);
|
||||
}
|
||||
$arr = array();
|
||||
$arr['phone'] = $post['phone'];
|
||||
$arr['status'] = 1;
|
||||
$res = Db::name('accounthosting')->where($arr)->value('id');
|
||||
if ($res != $post['uid']) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = '账号异常';
|
||||
return json_encode($result);
|
||||
}
|
||||
$result['erro'] = 0;
|
||||
$result['msg'] = '登录成功';
|
||||
$result['token'] = $this->authcode($post['uid'] . '_' . time(), 'ENCODE', $this->TokenKey, 60 * 60 * 3);
|
||||
return json_encode($result);
|
||||
}
|
||||
|
||||
private function checkToken($token, $uid)
|
||||
{
|
||||
$res = $this->authcode($token, 'DECODE', $this->TokenKey, 60 * 60 * 3);
|
||||
if (empty($res)) {
|
||||
return false;
|
||||
} else {
|
||||
$data = explode('_', $res);
|
||||
if ($data[0] == $uid) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getUserBaseInfo(Request $request)
|
||||
{
|
||||
$post = $request->param();
|
||||
if (!isset($post['uid']) || empty($post['uid'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入登录人id";
|
||||
return json_encode($result);
|
||||
}
|
||||
if (!isset($post['token']) || empty($post['token'])) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = "未传入token";
|
||||
return json_encode($result);
|
||||
}
|
||||
if ($this->checkToken($post['token'], $post['uid']) === false) {
|
||||
$result['erro'] = -1;
|
||||
$result['msg'] = 'token异常';
|
||||
return json_encode($result);
|
||||
}
|
||||
$result['infor'] = Db::name('accounthosting')
|
||||
->field('name,headimg,balance')
|
||||
->where('id', $post['uid'])
|
||||
->find();
|
||||
$result['erro'] = 0;
|
||||
$result['msg'] = '获取数据成功';
|
||||
return json_encode($result);
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
### 示例接口测试文件
|
||||
|
||||
### 获取用户列表
|
||||
GET https://api.example.com/users
|
||||
Content-Type: application/json
|
||||
|
||||
### 创建新用户
|
||||
POST http://101.43.95.130/usersapp/Ruilaiwechat/selectRealtimeInfoList
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"page": "1"
|
||||
}
|
||||
|
||||
### 更新用户信息
|
||||
PUT https://api.example.com/users/1
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "John Smith"
|
||||
}
|
||||
|
||||
### 删除用户
|
||||
DELETE https://api.example.com/users/1
|
||||
@@ -57,21 +57,30 @@ Page({
|
||||
success: res => {
|
||||
app.globalData.code = res.code
|
||||
this.setData({ code: res.code })
|
||||
this.getUserInfo()
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
getUserInfo() {
|
||||
wx.getUserInfo({
|
||||
success: (data) => {
|
||||
app.globalData.encryptedData = data.encryptedData
|
||||
app.globalData.iv = data.iv
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 获取手机号并登录
|
||||
getPhoneNumber(e) {
|
||||
const { encryptedData, iv } = e.detail
|
||||
wx.request({
|
||||
url: app.globalData.url + 'app/Cppwechat/wechatLogin',
|
||||
method: 'POST',
|
||||
header: { 'content-type': 'application/x-www-form-urlencoded' },
|
||||
data: {
|
||||
code: app.globalData.code,
|
||||
encryptedData: encryptedData,
|
||||
iv: iv
|
||||
encryptedData: app.globalData.encryptedData,
|
||||
iv: app.globalData.iv
|
||||
},
|
||||
success: this.handleLoginResponse.bind(this)
|
||||
})
|
||||
|
||||
@@ -70,9 +70,46 @@
|
||||
},
|
||||
"libVersion": "3.16.0",
|
||||
"packOptions": {
|
||||
"ignore": [],
|
||||
"ignore": [
|
||||
{
|
||||
"value": "*.docx",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"value": "*.xlsx",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"value": "*.bmp",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"value": "*.php",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"value": "*.py",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"value": "temp_*",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"value": "~$*",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"value": "api-test.http",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"value": "docs",
|
||||
"type": "folder"
|
||||
}
|
||||
],
|
||||
"include": []
|
||||
},
|
||||
"appid": "wx0847525a15342a46",
|
||||
"appid": "wx2deff82b6c422615",
|
||||
"simulatorPluginLibVersion": {}
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 86 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 104 KiB |
BIN
temp_shot.bmp
BIN
temp_shot.bmp
Binary file not shown.
|
Before Width: | Height: | Size: 2.3 MiB |
BIN
temp_shot3.jpg
BIN
temp_shot3.jpg
Binary file not shown.
|
Before Width: | Height: | Size: 80 KiB |
BIN
temp_thumb.png
BIN
temp_thumb.png
Binary file not shown.
|
Before Width: | Height: | Size: 76 KiB |
Binary file not shown.
BIN
生长减速预测模型系统.xlsx
BIN
生长减速预测模型系统.xlsx
Binary file not shown.
Reference in New Issue
Block a user