Files
code/application/app/controller/Ruilaiwechat.php

388 lines
13 KiB
PHP
Raw Permalink Normal View History

2026-01-28 10:16:06 +08:00
<?php
namespace app\app\controller;
use think\Request;
use think\Db;
/**
*瑞莱医疗小程序
*/
class Ruilaiwechat extends Base{
//小程序appid
private $Appid;
//小程序秘钥
private $Appsecret;
//商户号
//private $Mch_id;
//商户key
//private $Key;
//访问令牌加密秘钥
private $TokenKey;
public function __construct(){
$this->Appid='wx0847525a15342a46';
$this->Appsecret='71cf8c524580ba6b262e6dc52d44da4c';
// $this->Mch_id='1611903889';
// $this->Key='b046hjZnS6ioMacttGA66ffae887e55f';
$this->TokenKey='ruilai340u20k4';
}
/********************************* 首页 *********************************/
/**
*查询资讯列表
*/
public function selectRealtimeInfoList(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'] : 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['total'] = $res->total();//数据总条数
$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['age']) || empty($post['age']) || !is_numeric($post['age'])){
$result['erro'] = -1;
$result['msg'] = "未传入年龄";
return json_encode($result);
}
if(!isset($post['height']) || empty($post['height']) || !is_numeric($post['height'])){
$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['father_height']) || empty($post['father_height']) || !is_numeric($post['father_height'])){
$result['erro'] = -1;
$result['msg'] = "未传入父亲身高";
return json_encode($result);
}
if(!isset($post['mother_height']) || empty($post['mother_height']) || !is_numeric($post['mother_height'])){
$result['erro'] = -1;
$result['msg'] = "未传入母亲身高";
return json_encode($result);
}
if(!isset($post['LH']) || empty($post['LH']) || !is_numeric($post['LH'])){
$result['erro'] = -1;
$result['msg'] = "未传入LH或数据格式不对";
return json_encode($result);
}
if(!isset($post['IGF']) || empty($post['IGF']) || !is_numeric($post['IGF'])){
$result['erro'] = -1;
$result['msg'] = "未传入IGF或数据格式不对";
return json_encode($result);
}
//子宫厚度
if(!isset($post['uterus_thickness']) || empty($post['uterus_thickness']) || !is_numeric($post['uterus_thickness'])){
$result['erro'] = -1;
$result['msg'] = "未传入uterus_thickness或数据格式不对";
return json_encode($result);
}
//计算
//计算公式 P= (exp(-5.908+0.008*IGF-1+2.146*LH+0.286*子宫(厚)))/(1 + exp(-5.908+0.008*IGF-1+2.146*LH+0.286*子宫(厚)))
$exp = exp(-5.908 + 0.008*$post['IGF'] + 2.146*$post['LH'] + 0.286*$post['uterus_thickness']);
$probability = $exp / (1 + $exp);
//保存记录数据
$data=[];
$data['id']=md5(time().rand(100000,999999));
$data['uid']=$post['uid'];
$data['name']=$post['name'];
$data['age']=$post['age'];
$data['height']=$post['height'];
$data['bone_age']=$post['bone_age'];
$data['father_height']=$post['father_height'];
$data['mother_height']=$post['mother_height'];
$data['IGF']=$post['IGF'];
$data['LH']=$post['LH'];
$data['uterus_thickness']=$post['uterus_thickness'];
$data['calculate_resutlt']=round($probability,3);
$data['create_time']=date('Y-m-d H:i:s');
$res=Db::name('wechat_calculate_record')->insert($data);
if($res===false){
$result['erro'] = -1;
$result['msg'] = "计算失败";
return json_encode($result);
}else{
$result['erro'] = 0;
$result['msg'] = "计算成功";
$result['calculate_resutlt'] = $data['calculate_resutlt'];
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('wechat_calculate_record')
->field('id,name,age,height,bone_age,father_height,mother_height,IGF,LH,uterus_thickness,calculate_resutlt,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['total'] = $res->total();//数据总条数
$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('wechat_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('wechat_calculate_record')->where('id',$id)->delete();
if($res > 0){
$result['erro'] = 0;
$result['msg'] = '删除成功';
}else{
$result['erro'] = -1;
$result['msg'] = '删除失败';
}
return json($result);
}
/********************************* 计算 *********************************/
/********************************* 登录 *********************************/
/**
*小程序授权登录,获取微信用户信息
* code: wx.login()获取到的code
* encryptedDatawx.getUserInfo获取到的encryptedData
* iv:wx.getUserInfo获取到的iv
*/
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);
// $apiData=['session_key'=>'dsQb6qITD2CZyBilb22dag==','openid'=>'oXcSb66vSO0_aGbL0NXJ_cxXnt5g'];
// var_dump($apiData);
if(!isset($apiData['errcode'])){
$sessionKey =$apiData['session_key'];//$post['sessionKey'];//
$errCode =$this->decryptData($sessionKey,$this->Appid,$encryptedData, $iv, $data );
// LogUtils::error('小程序解析:'.$data, __METHOD__);
if ($errCode == 0) {
//保存用户信息
$record=json_decode($data,true);
$res=$this->saveUseInfor($record);
return json_encode($res);
} else {
//LogUtils::error('解析数据错误:'.$errCode, __METHOD__);
$result['erro'] = -1;
$result['msg'] = "解析接口返回数据失败,请重试!";
return json_encode($result);
}
}else{
// LogUtils::error('错误码:'.$apiData['errcode'].',错误信息:'.$apiData['errmsg'], __METHOD__);
$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'];
//var_dump(strlen($data['headimg']));
//是否已经保存信息
$rec=Db::name('wechat_user')->field('uid')->where('openid',$record['openId'])->find();
if(empty($rec)){
//用户openid
$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['version_number']) || empty($post['version_number'])){
$result['erro'] = -1;
$result['msg'] = "未传入版本号";
return json_encode($result);
}
switch($post['version_number']){
case '1.0.0':
return $this->getUserBaseInfo_1_0_0($post);
break;
default:
return $this->getUserBaseInfo_1_0_0($post);
break;
}
}
private function getUserBaseInfo_1_0_0($post){
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);
}
}
?>