blog

ユーザー情報を取得する

<?php\n ;\n ヘッダを追加します;\n /* 設定開始 */\n $appid...

Feb 16, 2020 · 5 min. read
シェア
 <?php
 error_reporting(1);
 header('Content-type:text/html; Charset=utf-8');
 /* コンフィギュレーション開始*/
 $appid = ''; //公共プラットフォーム> >基本構成>AppID
 $appKey = ''; //公共プラットフォーム> >基本構成>AppSecret
 /* 設定終了*/
 //
    1. ユーザーのopenidが取得される。
 $wxPay = new WxService($appid,$appKey);
 $data = $wxPay->GetOpenid(); //openidを取得する
 if(!$data['openid']) exit('openidの取得に失敗した');
 //
    2. ユーザー情報を取得する
 $user = $wxPay->getUserInfo($data['openid'],$data['access_token']);
 ?>
 <!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="UTF-8">
 <meta name="renderer" content="webkit" />
 <meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
 <title>ユーザー情報取得デモ</title>
 <link href="https://..com/bootstrap/..0/css/..css" rel="stylesheet">
 <script src="https://..com/jquery/..0/..js"></script>
 </head>
 <body>
 <div class="container">
 <div class="row">
 <h1>基本情報は以下の通りである:</h1>
 <table class="table table-bordered">
 <tr>
 <td>openid</td>
 <td><?=$user['openid']?></td>
 </tr>
 <tr>
 <td>unionid</td>
 <td><?=$user['unionid']?></td>
 </tr>
 <tr>
 <td> </td>
 <td><?=$user['nickname']?></td>
 </tr>
 <tr>
 <td> </td>
 <td><img src="<?=$user['headimgurl']?>" style="width: 100px;" alt=""></td>
 </tr> 
 <tr>
 <td> </td>
 <td><?php
 switch (strtoupper($user['sex'])){
 case 1:
 echo ' ;
 break;
 case 2:
 echo '女性;
 break;
 default:
 echo ' ;
 break;
 }
 ?></td>
 </tr>
 <tr>
 <td>州 / 都市</td>
 <td><?=$user['province'].' / '.$user['city']?></td>
 </tr>
 <tr>
 <td>language</td>
 <td><?=$user['language']?></td>
 </tr>
 </table>
 </div>
 </div>
 </body>
 </html>
 <?php
 class WxService
 {
 protected $appid;
 protected $appKey;
 public $data = null;
 public function __construct($appid, $appKey)
 {
 $this->appid = $appid; //APPIDに対応する決済アプリケーション
 $this->appKey = $appKey; //対応するApp Keyを支払う
 }
 /**
 * ジャンプしてユーザーのopenidを取得する。ジャンプのプロセスは以下の通り:
 * httpsサーバーにコールバックするために必要なurlとその他のパラメーターを設定する。://...com/connect/oauth2/authorize
 * 処理が完了すると、サービスはユーザーリダイレクトにジャンプバックする。_uriアドレスに、今度は次のようなパラメーターを指定する。
 *
 * @return ユーザーのopenid
 */
 public function GetOpenid()
 {
 //コードでopenidを取得する
 if (!isset($_GET['code'])){
 //トリガー・リターン・コード コード
 $baseUrl = $this->getCurrentUrl();
 $url = $this->__CreateOauthUrlForCode($baseUrl);
 Header("Location: $url");
 exit();
 } else {
 //openidのコードを取得する
 $code = $_GET['code'];
 $openid = $this->getOpenidFromMp($code);
 return $openid;
 }
 }
 public function getCurrentUrl()
 {
 $scheme = $_SERVER['HTTPS']=='on' ? 'https://' : 'http://';
 $uri = $_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING'];
 if($_SERVER['REQUEST_URI']) $uri = $_SERVER['REQUEST_URI'];
 $baseUrl = urlencode($scheme.$_SERVER['HTTP_HOST'].$uri);
 return $baseUrl;
 }
 /**
 * コードを使ってワークベンチからopenidマシンにアクセスする_token
 * @param string $code コードでジャンプバックする
 * @return openid
 */
 public function GetOpenidFromMp($code)
 {
 $url = $this->__CreateOauthUrlForOpenid($code); 
 $res = self::curlGet($url);
 $data = json_decode($res,true);
 $this->data = $data;
 return $data;
 }
 /**
 * オープンでアクセスするためのコンストラクト_tokeのURLアドレス。
 * @param string $code,コードに戻る
 * @return 要求されたURL
 */
 private function __CreateOauthUrlForOpenid($code)
 {
 $urlObj["appid"] = $this->appid;
 $urlObj["secret"] = $this->appKey;
 $urlObj["code"] = $code;
 $urlObj["grant_type"] = "authorization_code";
 $bizString = $this->ToUrlParams($urlObj);
 return "https://...com/sns/oauth2/access_token?".$bizString;
 }
 /**
 * コードを取得するためのurl接続を構築する
 * @param string $redirectUrl サーバーがジャンプして戻るURL、URLエンコーディングが必要
 * @return 構築された url を返す
 */
 private function __CreateOauthUrlForCode($redirectUrl)
 {
 $urlObj["appid"] = $this->appid;
 $urlObj["redirect_uri"] = "$redirectUrl";
 $urlObj["response_type"] = "code";
 $urlObj["scope"] = "snsapi_userinfo";
 $urlObj["state"] = "STATE";
 $bizString = $this->ToUrlParams($urlObj);
 return "https://...com/connect/oauth2/authorize?".$bizString;
 }
 /**
 * シグネチャー文字列をスプライシングする
 * @param array $urlObj
 * @return スプライスされた文字列を返す
 */
 private function ToUrlParams($urlObj)
 {
 $buff = "";
 foreach ($urlObj as $k => $v)
 {
 if($k != "sign") $buff .= $k . "=" . $v . "&";
 }
 $buff = trim($buff, "&");
 return $buff;
 }
 /**
 * ユーザー情報を取得する
 * @param string $openid WebAuthorityGetUserInfo インターフェースを呼び出し、ユーザの Openid を以下のように取得する。
 * @return string
 */
 public function getUserInfo($openid,$access_token)
 {
 $response = self::curlGet('https://...com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh');
 return json_decode($response,true);
 }
 public static function curlGet($url = '', $options = array())
 {
 $ch = curl_init($url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_TIMEOUT, 30);
 if (!empty($options)) {
 curl_setopt_array($ch, $options);
 }
 //https証明書とホストの検証を依頼しない
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
 $data = curl_exec($ch);
 curl_close($ch);
 return $data;
 }
 public static function curlPost($url = '', $postData = '', $options = array())
 {
 if (is_array($postData)) {
 $postData = http_build_query($postData);
 }
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
 curl_setopt($ch, CURLOPT_TIMEOUT, 30); //cURLが実行できる最大秒数を設定する。
 if (!empty($options)) {
 curl_setopt_array($ch, $options);
 }
 //https証明書とホストの検証を依頼しない
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
 $data = curl_exec($ch);
 curl_close($ch);
 return $data;
 }
 }
Read next

Javaマルチスレッド-FutureTaskはどのように戻り値を取得するには?

これは、Javaのマルチスレッドの始まりであり、この記事では、主にスレッドの状態についての簡単なチャット、作成するためのいくつかの方法であり、次に分析するためのビューのソースコードのポイントから、このクラスは、CallableとRunnableの両方との関係を持っており、Callaを管理することができるFutureインターフェイスの実装です...

Feb 16, 2020 · 9 min read