success(json_decode(WechatService::jsSdk($request->get('url')), true)); } /** * 公众号授权登陆 * @param Request $request * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function auth(Request $request) { $spreadId = intval($request->param('spread')); $login_type = $request->param('login_type', 1); @file_put_contents("auth.txt", json_encode(input())); try { $wechatInfo = WechatService::oauthService($this->cid)->user()->getOriginal(); } catch (\Exception $e) { $this->error(['message' => $e->getMessage(), 'line' => $e->getLine()]); } @file_put_contents("auth.txt", "\r\n" . json_encode($wechatInfo), 8); try { if (!isset($wechatInfo['nickname'])) { try { $wechatInfo = WechatService::getUserInfo($this->cid, $wechatInfo['openid']); } catch (\Exception $e) { $this->error(['message' => $e->getMessage(), 'line' => $e->getLine()]); } if (!$wechatInfo['subscribe'] && !isset($wechatInfo['nickname'])) exit(WechatService::oauthService($this->cid)->scopes(['snsapi_userinfo']) ->redirect($this->request->url(true))->send()); if (isset($wechatInfo['tagid_list'])) $wechatInfo['tagid_list'] = implode(',', $wechatInfo['tagid_list']); } else { if (isset($wechatInfo['privilege'])) unset($wechatInfo['privilege']); if (!UserRelation::where(['openid' => $wechatInfo['openid']])->find()) $wechatInfo['subscribe'] = 0; } $openid = $wechatInfo['openid']; $wechatInfo['cid'] = $this->cid; $params = [$openid, $wechatInfo, $spreadId, $login_type]; @file_put_contents("auth.txt", "\r\n" . json_encode($params), 8); Hook::exec("\\app\admin\\behavior\\User", "WechatOauth", $params); $user = User::where('id', UserRelation::openidToUid($openid, 'openid'))->find(); if (!$user) $this->error('获取用户失败'); $this->auth->direct($user['id']); // 设置推广关系 User::setSpread(intval($spreadId), $user->id); return $this->success('登录成功', $this->auth->getUserinfo()); } catch (Exception $e) { @file_put_contents("error.txt", $e->getFile() . '-', $e->getLine(), '-' . $e->getMessage()); } } // // /** // * 扣款服务 // * @param Request $request // * @return mixed // * @throws \think\db\exception\DataNotFoundException // * @throws \think\db\exception\ModelNotFoundException // * @throws \think\exception\DbException // */ // public function signing(Request $request) // { // $price = intval($request->param('price')); // $uid = intval($request->param('uid')); // $cid = intval($request->param('cid')); // $plan_id = WechatPlan::where('price', $price)->value('plan_id'); // $p_id = WechatPlan::where('price', $price)->value('id'); //// var_dump($plan_id); //// var_dump($p_id);die(); //// $plan_id = 11; //// $p_id = 12; // try { //// $notify_url=Request::instance()->domain() . "/api/wechat/notify/" . $cid; //回调接口 //// $app_id = 'wx5681205d1ef4d9d3'; // $app_id = Company::where('id', $cid)->value('wechat_appid'); //// $mch_id = '1623907696'; // $mch_id = Company::where('id', $cid)->value('pay_weixin_mchid'); // $key = Company::where('id', $cid)->value('pay_weixin_key'); // @file_put_contents("quanju.txt", $key . "-key\r\n", 8); // $contract_code = $this->generateRandomString(12); // $notify_url = Request::instance()->domain() . "/api/wechat/notify/" . $cid; //回调接口 $cid 企业id //// $num = time() + mt_rand(10, 999999) . '' . substr($msec, 2, 3);//生成随机数 //// $request_serial=$this->generateUniqueSerialNumber(); // $request_serial = WechatPlanRecord::where('is_signing', 0)->order('request_serial desc')->value('request_serial'); // if (empty($request_serial)) { // $request_serial = 100000; // } else { // $request_serial = $request_serial + 1; // } // $contract_display_account = User::where('id', $uid)->value('nickname'); // if (empty($contract_display_account)){ // $this->error('用户不存在!'); // } // $timestamp = time(); // $version = '1.0'; // $array = array( // 'appid' => $app_id, // 'mch_id' => $mch_id, // 'plan_id' => $plan_id, //// 'sub_mch_id' => $sub_mch_id, // 'contract_code' => $contract_code, // 'notify_url' => $notify_url, // 'contract_display_account' => $contract_display_account, // 'request_serial' => $request_serial, // 'timestamp' => $timestamp, // 'version' => $version, // // ); // // // ksort($array); // $xml = ''; // foreach ($array as $key => $value) { // $xml = $xml . $key . '=' . $value . '&'; // } // $xml = substr($xml, 0, -1); // @file_put_contents("quanju.txt", $xml . "-签约内容\r\n", 8); // $sign = $this->md5_sign($xml, $key); // @file_put_contents("quanju.txt", $sign . "-签名\r\n", 8); // $url = 'https://api.mch.weixin.qq.com/papay/entrustweb?' . $xml . '&sign=' . $sign; // @file_put_contents("quanju.txt", $url . "-链接\r\n", 8); //// var_dump($url); // $response = $this->curl_get($url); //// $url = $this->OfficialAccountSigning($app_id, $mch_id, $plan_id, $contract_code, $request_serial, $contract_display_account, $notify_url, $version, $sign, $timestamp); // @file_put_contents("quanju.txt", $response . "-返回链接\r\n", 8); // // WechatPlanRecord::create([ // 'uid' => $uid, // 'plan_id' => $plan_id, // 'price' => $price, // 'is_signing' => 0, // 'request_serial' => $request_serial, // 'contract_code' => $contract_code, // 'contract_display_account' => $contract_display_account, // 'createtime' => time(), // 'cid' => 12, // ]); //// die(); // $this->success('获取成功', $response); //// return $response; // } catch (Exception $e) { //// var_dump($e->getMessage()); // @file_put_contents("quanju.txt", $e->getMessage() . "-报错信息\r\n", 8); // @file_put_contents("error.txt", $e->getFile() . '-', $e->getLine(), '-' . $e->getMessage()); // } // } // // /** // * 解约扣款服务 // * @param Request $request // * @return mixed // * @throws \think\db\exception\DataNotFoundException // * @throws \think\db\exception\ModelNotFoundException // * @throws \think\exception\DbException // */ // public function delete_signing(Request $request) // { // $record_id = intval($request->param('id')); // $uid = intval($request->param('uid')); // $cid = intval($request->param('uid')); // try { //// $notify_url=Request::instance()->domain() . "/api/wechat/notify/" . $cid; //回调接口 // $app_id = Company::where('id', $cid)->value('wechat_appid'); // $mch_id = Company::where('id', $cid)->value('pay_weixin_mchid'); // $contract_code = WechatPlanRecord::where('id', $record_id)->value('contract_code'); // $plan_id = WechatPlanRecord::where('id', $record_id)->value('plan_id'); // $contract_termination_remark = '解约备注'; // $version = '1.0'; // $array = array( // 'appid' => $app_id, // 'mch_id' => $mch_id, // 'plan_id' => $plan_id, // 'contract_code' => $contract_code, // 'contract_termination_remark' => $contract_termination_remark, // 'version' => $version // ); // // // ksort($array); // $xml = ''; // foreach ($array as $key => $value) { // $xml = $xml . $key . '=' . $value . '&'; // } // $xml = substr($xml, 0, -1); // @file_put_contents("quanju.txt", json_encode($xml) . "-签约内容\r\n", 8); // $sign = $this->md5_sign($xml, '192006250b4c09247ec02edce69f6a2d'); // @file_put_contents("quanju.txt", $sign . "-签名\r\n", 8); // $url = 'https://api.mch.weixin.qq.com/papay/deletecontract?' . $xml . '&sign=' . $sign; // @file_put_contents("quanju.txt", $url . "-链接\r\n", 8); // var_dump($url); //// $response = $this->curl_get($url); //// $url=$this->OfficialAccountSigning($app_id,$mch_id,$plan_id,$contract_code,$request_serial,$contract_display_account,$notify_url,$version,$sign,$timestamp); //// @file_put_contents("quanju.txt", $response.'返回链接'); // // WechatPlanRecord::where('id', $record_id)->update(['is_signing' => 1]); // die(); // return 1; // } catch (Exception $e) { // @file_put_contents("error.txt", $e->getFile() . '-', $e->getLine(), '-' . $e->getMessage()); // } // } // // public function generateRandomString($length) // { // $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // $charactersLength = strlen($characters); // $randomString = ''; // for ($i = 0; $i < $length; $i++) { // $randomString .= $characters[rand(0, $charactersLength - 1)]; // } // return $randomString; // } // //// 生成唯一序列号 // public function generateUniqueSerialNumber() // { // // 使用uniqid生成一个唯一ID,并去除前缀的'0' // $uniqueId = ltrim(uniqid('', true), '0'); // // // 确保生成的ID不以0开头且长度不超过19位(int64的最大长度) // while (strlen($uniqueId) > 19 || substr($uniqueId, 0, 1) === '0') { // $uniqueId = ltrim(uniqid('', true), '0'); // } // // // 将生成的ID转换为纯数字 // $serialNumber = preg_replace('/\D/', '', $uniqueId); // // // 确保生成的序列号不以0开头 // if (substr($serialNumber, 0, 1) === '0') { // $serialNumber = generateUniqueSerialNumber(); // 递归调用以重新生成 // } // // return $serialNumber; // } // // // public function curl_post($url = '', $name = array(), $timeout = 100) // { // // var_dump($url);die(); // $ch = curl_init(); // curl_setopt($ch, CURLOPT_URL, $url); // curl_setopt($ch, CURLOPT_HEADER, false); //是否显示头部 // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//是否直接输出到屏幕 // curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 // curl_setopt($ch, CURLOPT_POST, true); //是否以post方式 // //设置post数据 // $post_data = json_encode($name); // // curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); // curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); // $content = curl_exec($ch); // // var_dump($content);die(); // curl_close($ch); // $content = json_decode($content, true); // return $content; // // } // // public function curl_get(string $url, $timeout = 100) // { //// if (!empty($name)) { //// $data = '&'; //// foreach ($name as $k => $v) { //// $data = $data . $k . '=' . $v.'&'; //// } //// $url = $url . $data; //// } //// $url = substr($url,0,-1); // $ch = curl_init(); // curl_setopt($ch, CURLOPT_URL, $url); // curl_setopt($ch, CURLOPT_HEADER, false); //是否显示头部 // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//是否直接输出到屏幕 // curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 // // $content = curl_exec($ch); // curl_close($ch); //// $content = json_decode($content, true); // // $content = (array)$content; // var_dump($content);die(); // return $content; // } // // public function md5_sign($data, $key) // { // $stringSignTemp = $data . "&key=$key"; //注:key为商户平台设置的密钥key // // $sign = MD5($stringSignTemp); //MD5加密 // $sign = strtoupper($sign); //大写 // return $sign; // } // // /** // * 公众号签约 // * see:https://pay.weixin.qq.com/wiki/doc/api/wxpay_v2/papay/chapter3_1.shtml // * @param array $data // * // * @return array // * @throws AuthorizeFailedException // */ // public function OfficialAccountSigning(string $appid, string $mch_id, string $plan_id, string $contract_code, string $request_serial, string $contract_display_account, string $notify_url, string $version, string $sign, string $timestamp): array // { // // $url = 'https://api.mch.weixin.qq.com/papay/entrustweb'; // $info = [ // 'appid' => $appid, //应用ID // 'mch_id' => $mch_id, //商户号 // 'plan_id' => $plan_id, //模板id //// 'sub_mch_id' => $sub_mch_id, //子商户号 // 'contract_code' => $contract_code, //签约协议号 // 'request_serial' => $request_serial, //请求序列号 // 'contract_display_account' => $contract_display_account, //用户账户展示名称 // 'notify_url' => $notify_url, //回调通知url // 'version' => $version, //版本号 固定值1.0 // 'sign' => $sign, //签名 // 'timestamp' => $timestamp // ]; // $response = $this->curl_get($url, $info); // return $response; // } // // public function test() // { // return '123456'; // } public function signing_plan() { $this->success('获取成功', WechatPlan::where('cid', 12)->select()); } // 用户签约列表 public function user_signing(Request $request) { $uid = intval($request->param('uid')); $this->success('获取成功', WechatPlanRecord::where('uid', $uid)->where('is_signing', 0)->select()); } }