app_id = $app_id; $this->app_secret = $app_secret; } /** * 获取微信授权链接 * * @return string */ public function getAuthorizeUrl() { $redirect_uri = addon_url('epay/api/wechat', [], true, true); $redirect_uri = urlencode($redirect_uri); $state = \fast\Random::alnum(); Session::set('state', $state); return "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this->app_id}&redirect_uri={$redirect_uri}&response_type=code&scope={$this->scope}&state={$state}#wechat_redirect"; } /** * 获取微信openid * * @return mixed|string */ /* array(5) { ["access_token"] => string(89) "49_r4I-StVANS8uYWTUHG86GJ-g1iH6mMFWy-9LeOta--2l6Bzg8LVDQFu8VSARu87atETzVJFZ-fndy-aQqEb8wQ" ["expires_in"] => int(7200) ["refresh_token"] => string(89) "49_8Vfa-imGcRmUwcESvpvMcEkiuh8kmD_movl9bIz9DV5GonZrqfIya5NgT7G-NMeJ7KTuCjMrSJi4BtojjDxnCQ" ["openid"] => string(28) "o8lxjwRjlDortQKhTk1dpHjQxcBU" ["scope"] => string(15) "snsapi_userinfo" } * */ public function getOpenid($code = '') { $openid = Session::get('openid'); if (!$openid) { $token = $this->getAccessToken($code); $openid = isset($token['openid']) ? $token['openid'] : ''; if ($openid) { Session::set("openid", $openid); } } return $openid; } /* array(2) { ["ret"] => bool(true) ["msg"] => string(307) "{"openid":"o8lxjwRjlDortQKhTk1dpHjQxcBU","nickname":"科","sex":1,"language":"zh_CN","city":"临沂","province":"山东","country":"中国","headimgurl":"https:\/\/thirdwx.qlogo.cn\/mmopen\/vi_32\/LGYWIv4F5vxZ2zCM9GEUynoQeJ6ibX9IfoKPAWLlGIugn1mgaAMPuqxzPBDQ3ktLEv2ia7HmOeJYTg5LofG8YlwQ\/132","privilege":[]}" } */ public function getwxuserinfo($code = '') { $wxuserinfo = Session::get('wxuserinfo'); if (!$wxuserinfo) { /*if (!isset($_REQUEST['code'])) { return ''; } else { $code = $_REQUEST['code'];*/ $token = $this->getAccessToken($code); $openid = isset($token['openid']) ? $token['openid'] : ''; $access_token = isset($token['access_token']) ? $token['access_token'] : ''; $ret = Http::sendRequest('https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN'); if ($ret['ret']) { $wxuserinfo = json_decode($ret['msg'], true); Session::set('wxuserinfo', $wxuserinfo); }else{ $wxuserinfo = []; } /*}*/ } return $wxuserinfo; } /** * 获取授权token网页授权 * * @param string $code * @return mixed|string */ public function getAccessToken($code = '') { $params = [ 'appid' => $this->app_id, 'secret' => $this->app_secret, 'code' => $code, 'grant_type' => 'authorization_code' ]; $ret = Http::sendRequest('https://api.weixin.qq.com/sns/oauth2/access_token', $params, 'GET'); if ($ret['ret']) { $ar = json_decode($ret['msg'], true); return $ar; } return []; } public function getuserphonenumber($code = ''){ $access_token = $this->getPublicAccessToken(); $params = [ 'code' => $code, ]; $ret = Http::sendRequest('https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token='.$access_token, json_encode($params), 'POST'); if ($ret['ret']) { $ar = json_decode($ret['msg'], true); return $ar; } return []; } public function getPublicAccessToken(){ $ret = Http::sendRequest('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->app_id.'&secret='.$this->app_secret); if ($ret['ret']) { $ar = json_decode($ret['msg'], true); return $ar['access_token']; } } //{"errcode":0,"errmsg":"ok","msgid":2054095443608862720} public function send($ac,$openid,$first,$keyword1,$keyword2,$keyword3,$remark,$color){ $params = [ "touser" => $openid, "template_id" => "lEUyDmLgwIaFDi9SNlIosXe-4fD43SiqSOZigIPOfJ8", 'url' => 'https://***.lanmaonet.com', "data" => [ "first" => ["value"=>$first,"color"=>$color], "keyword1" => ["value"=>$keyword1,"color"=>"#173177"], "keyword2" => ["value"=>$keyword2,"color"=>"#173177"], "keyword3" => ["value"=>$keyword3,"color"=>"#173177"], "remark" => ["value"=>$remark,"color"=>$color], ], 'miniprogram' => [], ]; $rest = curl_post('https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='.$ac,json_encode($params)); } public function getJsticket($code = '') { $jsticket = Session::get('jsticket'); if (!$jsticket) { $token = $this->getAccessToken($code); $params = [ 'access_token' => 'token', 'type' => 'jsapi', ]; $ret = Http::sendRequest('https://api.weixin.qq.com/cgi-bin/ticket/getticket', $params, 'GET'); if ($ret['ret']) { $ar = json_decode($ret['msg'], true); return $ar; } } return $jsticket; } }