ホームページ > バックエンド開発 > PHPチュートリアル > EaglePHP フレームワーク v2.7 に基づいて開発された WeChat 5.0 の最新かつ最も包括的な API インターフェイス

EaglePHP フレームワーク v2.7 に基づいて開発された WeChat 5.0 の最新かつ最も包括的な API インターフェイス

WBOY
リリース: 2016-07-25 08:49:07
オリジナル
913 人が閲覧しました
コード ソース: http://www.eaglephp.com
適用可能なプラットフォーム: window/Linux
依存プロジェクト: EaglePHP フレームワーク

以下の WeChat 5.0 API 基本インターフェイス、カスタム メニュー、および高度なインターフェイスが含まれます:
1. ユーザー メッセージを受信します。 。
2. ユーザーに返信します。
3. イベントプッシュを受け入れます。
4. 会話インターフェースのカスタムメニュー。
5. 音声認識。
6. カスタマーサービスインターフェース。
7. OAuth2.0 Web 認証。
8. パラメーターを使用して QR コードを生成します。
9. ユーザーの地理的位置を取得します。
10. 基本的なユーザー情報を取得します。
11. フォロワーリストを取得します。
12. ユーザーのグループ化。
  1. /**
  2. * WeChat パブリック プラットフォーム API
  3. *
  4. * @author maojianlw@139.com
  5. * [url=home.php?mod=space&uid=17823]@LINK[/url] http://www.eaglephp.com
  6. */
  7. class WeixinChat
  8. {
  9. private $token;
  10. private $appid;
  11. private $appsecret;
  12. private $access_token;
  13. //受信データ
  14. private $_receive = array();
  15. private $_reply = '';
  16. // インターフェースエラーコード
  17. private $errCode = '';
  18. // インターフェースエラーメッセージ
  19. private $errMsg = '' ;
  20. // WeChat oauth でログインしてコードを取得します
  21. const CONNECT_OAUTH_AUTHORIZE_URL = 'https://open.weixin.qq.com/connect/oauth2/authorize?';
  22. // WeChat oauth でログインし、 Web ページ認証のコード access_token
  23. const SNS_OAUTH_ACCESS_TOKEN_URL = 'https://api.weixin.qq.com/sns/oauth2/access_token?';
  24. // WeChat oauth ログイン更新 access_token (必要な場合)
  25. const SNS_OAUTH_REFRESH_TOKEN_URL = 'https: //api.weixin.qq .com/sns/oauth2/refresh_token?';
  26. // チケットを QR コードに交換
  27. const SHOW_QRCODE_URL = 'https://mp.weixin.qq.com/cgi-bin/showqrcode? ';
  28. // WeChat oauth ログインはユーザー情報を取得します (スコープは snsapi_userinfo である必要があります)
  29. const SNS_USERINFO_URL = 'https://api.weixin.qq.com/sns/userinfo?';
  30. // API プレフィックスをリクエストします
  31. const API_URL_PREFIX = 'https://api.weixin.qq.com/cgi-bin';
  32. // カスタムメニューの作成
  33. const MENU_CREATE_URL = '/menu/create?';
  34. // カスタムメニューのクエリ
  35. const MENU_GET_URL = '/menu /get?';
  36. // カスタムメニューの削除
  37. const MENU_DELETE_URL = '/menu/delete?';
  38. // access_token
  39. を取得 const AUTH_URL = '/token?grant_type=client_credential&';
  40. //ユーザーの基本情報を取得
  41. const USER_INFO_URL = '/user/info?';
  42. // フォロワーリストを取得
  43. const USER_GET_URL = '/user/get?';
  44. // グループをクエリ
  45. const GROUPS_GET_URL = '/groups /get? ';
  46. // グループを作成する
  47. const GROUPS_CREATE_URL = '/groups/create?';
  48. // グループ名を変更する
  49. const GROUPS_UPDATE_URL = '/groups/update?'; groups
  50. const GROUPS_MEMBERS_UPDATE_URL = '/groups/members/update?';
  51. //カスタマーサービスメッセージを送信
  52. const MESSAGE_CUSTOM_SEND_URL = '/message/custom/send?';
  53. //QRコードチケットを作成
  54. const QRCODE_CREATE_URL = ' /qrcode/create? ';
  55. /**
  56. * 初期化設定データ
  57. * @param array $options
  58. */
  59. パブリック関数 __construct($options)
  60. {
  61. $this->token = isset($options['token']) ? ['トークン'] : '';
  62. $this->appid = isset($options['appid']) ? $options['appid'] : '';
  63. $this->appsecret = isset($ options['appsecret' ]) ? $options['appsecret'] : '';
  64. }
  65. /**
  66. * 受信メッセージを取得する
  67. * 一般の WeChat ユーザーが公開アカウントにメッセージを送信すると、WeChat サーバーは、開発者が入力した URL にメッセージの XML データ パケットを POST します。
  68. */
  69. public function getRev()
  70. {
  71. $postStr = file_get_contents('php:/ /input');
  72. if($postStr)
  73. {
  74. $this->_receive = (array)simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  75. //Log::info(var_export($this->) ;_receive, true) );
  76. }
  77. return $this;
  78. }
  79. /**
  80. * WeChatサーバーから送信されたメッセージを取得します
  81. */
  82. public function getRevData()
  83. {
  84. return $this->_receive;
  85. }
  86. / **
  87. * 受信機を入手します
  88. */
  89. public function getRevTo()
  90. {
  91. return isset($this->_receive['ToUserName']) $this->_receive['ToUserName'] : false;
  92. }
  93. /**
  94. * メッセージ送信者 (OpenID) を取得します
  95. */
  96. public function getRevFrom()
  97. {
  98. return isset($this->_receive['FromUserName']) $this->_receive['FromUserName'] : false;
  99. }
  100. /* *
  101. * 受信メッセージの作成時刻を取得(整数型)
  102. */
  103. public function getRevCTime()
  104. {
  105. return isset($this->_receive['CreateTime']) $this->_receive['CreateTime'] : false;
  106. }
  107. /**
  108. * 受信したメッセージの種類(テキスト、画像、音声、ビデオ、場所、リンク、イベント)を取得します
  109. */
  110. public function getRevType()
  111. {
  112. return isset($this->_receive['MsgType']) $this->_receive['MsgType'] : false;
  113. }
  114. /**
  115. * 受信したメッセージ番号を取得します
  116. */
  117. public function getRevId()
  118. {
  119. return isset($this->_receive['MsgId']) $this->_receive['MsgId' ] : false;
  120. }
  121. /**
  122. * 受信したメッセージテキストを取得します
  123. * 音声認識インターフェイスを通じて、ユーザーが送信した音声には、音声認識によって認識されたテキストの内容も表示されます。(サービスアカウントの高度なインターフェース権限を申請する必要があります)
  124. */
  125. public function getRevText()
  126. {
  127. if(isset($this->_receive['Content'])) returnrim($this- >_receive[' コンテンツ']);
  128. elseif(isset($this->_receive['認識'])) return trim($this->_receive['認識']);
  129. else return false;
  130. }
  131. / **
  132. * 画像メッセージの送受信
  133. */
  134. public function getRevImage()
  135. {
  136. if(isset($this->_receive['PicUrl'])){
  137. return array(
  138. 'picUrl' => $this-> _receive['PicUrl'], //画像リンク
  139. 'mediaId' => $this->_receive['MediaId'] //画像メッセージのメディア ID、マルチメディア ファイル ダウンロード インターフェイスを呼び出してプルできますデータ。 }
  140. return false;
  141. }
  142. /**
  143. * 音声メッセージを送受信する
  144. */
  145. public function getRevVoice()
  146. {
  147. if(isset($this->_receive['MediaId'])){
  148. return array(
  149. 'mediaId' => $this->_receive['MediaId'], //音声メッセージのメディア ID。マルチメディア ファイル ダウンロード インターフェイスを呼び出してデータを取得できます。
  150. 'format' => $this- >_receive[' Format'] //amr、speex などの音声形式
  151. );
  152. }
  153. return false;
  154. }
  155. /**
  156. *ビデオメッセージを受信できるようになります
  157. */
  158. public function getRevVideo()
  159. {
  160. if(isset($this ->_receive['MediaId'])){
  161. return array(
  162. 'mediaId' => $this->_receive['MediaId'], //ビデオ メッセージ メディア ID,これは、マルチメディア ファイル ダウンロード インターフェイス データを呼び出すことで取得できます。
  163. 'thumbMediaId' => $this->_receive['ThumbMediaId'] //ビデオ メッセージのサムネイルのメディア ID。マルチメディア ファイル ダウンロード インターフェイスを呼び出してデータを取得できます。
  164. );
  165. }
  166. return false;
  167. }
  168. /**
  169. * ユーザーの地理的位置を取得します
  170. */
  171. public function getRevLocation()
  172. {
  173. if(isset($this->_receive['Location_X'])){
  174. return array(
  175. 'locationX' => $this->_receive['Location_X'], //地理的位置の次元
  176. 'locationY' => $this->_receive['Location_Y'], //地理的位置経度
  177. 'scale' => $this->_receive['Scale'], //地図のズームサイズ
  178. 'label' => $this->_receive['Label'] // 地理的位置情報
  179. ) ;
  180. }
  181. //地理的位置レポート インターフェイスを開いているパブリック アカウントの場合、ユーザーがフォローした後にパブリック アカウント セッションに入ると、パブリック アカウントの使用を許可するかどうかをユーザーに確認するボックスがポップアップ表示されます。地理上の位置。
  182. //ポップアップボックスはフォロー後に一度だけ表示され、今後は公式アカウントの詳細ページで操作できるようになります。
  183. elseif(isset($this->_receive['緯度']))
  184. {
  185. return array(
  186. '緯度' => $this->_receive['緯度'], //地理的位置の緯度
  187. ' longitude' => $this->_receive['Longitude'], //地理的位置の経度
  188. 'precision' => $this->_receive['Precision'] //地理的位置の精度
  189. );
  190. }
  191. return false;
  192. }
  193. /**
  194. * 受信リンクメッセージを取得します
  195. */
  196. public function getRevLink()
  197. {
  198. if(isset($this->_receive['Title'])){
  199. return array(
  200. ' title' => $this->_receive['Title'], //メッセージタイトル
  201. 'description' => $this->_receive['Description'], //メッセージ説明
  202. 'url' => ; $this->_receive['Url'] //メッセージリンク
  203. );
  204. }
  205. return false;
  206. }
  207. /**
  208. * 受信イベント タイプを取得します
  209. * 購読、購読解除、クリックなどのイベント タイプ
  210. */
  211. public function getRevEvent()
  212. {
  213. if(isset ($this->_receive['Event']))
  214. {
  215. return array(
  216. 'event' => strto lower($this->_receive['Event']),
  217. 'key'=> isset ($this->_receive['EventKey']) ? $this->_receive['EventKey'] : ''
  218. );
  219. }
  220. return false;
  221. }
  222. /**
  223. * 返信テキストメッセージを設定します
  224. * @param string $content
  225. * @param string $openid
  226. */
  227. public function text($content='')
  228. {
  229. $textTpl = "
  230. < ;![CDATA[%s]]>
  231. %s
  232. ";
  233. $this->_reply = sprintf($textTpl,
  234. $this->getRevFrom (),
  235. $this->getRevTo(),
  236. Date::getTimeStamp(),
  237. 'text',
  238. $content
  239. );
  240. return $this;
  241. }
  242. /**
  243. * 返信音楽情報を設定します
  244. * @param string $title
  245. * @param string $desc
  246. * @param string $musicurl
  247. * @param string $hgmusicurl
  248. */
  249. public function music($title, $desc, $musicurl, $hgmusicurl='')
  250. {
  251. $textTpl = '
  252. < /ToUserName>
  253. %s
  254. <音楽>
  255. <タイトル>
  256. <説明>
  257. ';
  258. //
  259. $this->_reply = sprintf( $textTpl、
  260. $this->getRevFrom()、
  261. $this->getRevTo()、
  262. Date::getTimeStamp()、
  263. '音楽'、
  264. $title、
  265. $desc、
  266. $musicurl、
  267. $ hgmusicurl
  268. );
  269. return $this;
  270. }
  271. /**
  272. * テキストメッセージに返信
  273. * @param array
  274. */
  275. public function news($data)
  276. {
  277. $count = count($data);
  278. $subText = '';
  279. if($count > 0)
  280. {
  281. foreach($data as $v)
  282. {
  283. $tmpText = '
  284. <![CDATA[%s]]></タイトル> </li> <li> <説明><![CDATA[%s]]></説明></li> <li> <PicUrl><![CDATA[%s]]></PicUrl></li> <li> <URL> ;<![CDATA[%s]]></Url></li> <li> </item>';</li> <li> </li> <li> $subText .= sprintf(</li> <li> $tmpText, $v['title'], </li> <li> isset($ v['説明']) ? $v['説明'] : '', </li> <li> isset($v['picUrl']) : '', </li> <li> isset($v['url] ']) ? $v['url'] : ''</li> <li> );</li> <li> }</li> <li> }</li> <li> </li> <li> $textTpl = '<xml></li> <li> <ToUserName><![CDATA[%s]]></ToUserName></li> <li> <FromUserName><![CDATA[%s]]>< ;/FromUserName></li> <li> <CreateTime><![CDATA[%s]]></CreateTime></li> <li> <MsgType><![CDATA[news]]></MsgType></li> <li> < ArticleCount><![CDATA[%d]]></ArticleCount></li> <li> <Articles>%s</Articles></li> <li> </xml>';</li> <li> </li> <li> $this->_reply = sprintf(</li> <li> $textTpl, </li> <li> $this->getRevFrom(), </li> <li> $this->getRevTo(), </li> <li> Date::getTimeStamp(), </li> <li> $count, </li> <li> $subText</li> <li> );</li> <li> return $this;</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * 返信メッセージ </li> <li> * @param array $msg</li> <li> * @param bool $return</li> <li>*/</li> <li> public function Reply()</li> <li> {</li> <li> header('Content-Type:text/xml');</li> <li> echo $this->_reply;</li> <li> exit;</li> <li> }</li> <li> </li> <li> </li> <li> /* *</li> <li> * カスタムメニュー作成 </li> <li> * @param配列メニューデータ </li> <li>*/</li> <li> public function createMenu($data)</li> <li> {</li> <li> if(!$this->access_token && !$this->checkAuth()) return false;</li> <li> </li> <li> $result =curlRequest(self:: API_URL_PREFIX.self::MENU_CREATE_URL.'access_token='.$this->access_token, $this->jsonEncode($data), 'post');</li> <li> if($result)</li> <li> {</li> <li> $jsonArr = json_decode($結果、true);</li> <li> if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);</li> <li> else return true;</li> <li> }</li> <li> </li> <li> return false;</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> *カスタマイズされたメニュークエリ</li> <li>*/</li> <li> public function getMenu()</li> <li> {</li> <li> if(!$this->access_token && !$this->checkAuth()) return false;</li> <li> </li> <li> $result =curlRequest(self ::API_URL_PREFIX.self::MENU_GET_URL.'access_token='.$this->access_token);</li> <li> if($result)</li> <li> {</li> <li> $jsonArr = json_decode($result, true);</li> <li> if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);</li> <li> else return $jsonArr;</li> <li> }</li> <li> </li> <li> return false;</li> <li> } </li> <li> </li> <li> </li> <li> /**</li> <li> *カスタムメニューは削除されました</li> <li>*/</li> <li> public function deleteMenu()</li> <li> {</li> <li> if(!$this->access_token && !$this->checkAuth()) return false;</li> <li> </li> <li> $result =curlRequest( self::API_URL_PREFIX.self::MENU_DELETE_URL.'access_token='.$this->access_token);</li> <li> if($result)</li> <li> {</li> <li> $jsonArr = json_decode($result, true);</li> <li> if(!$jsonArr | | (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);</li> <li> else return true;</li> <li> }</li> <li> </li> <li> return false;</li> <li> } </li> <li> </li> <li> </li> <li> /**</li> <li> * 基本的なユーザー情報を取得します </li> <li> * @param string $openid 現在の公開アカウントに固有の、一般ユーザーの識別子 </li> <li>*/</li> <li> public function getUserInfo($openid)</li> <li> {</li> <li> if(!$this->access_token && !$this->checkAuth()) return false;</li> <li> </li> <li> $result = curlRequest(self::API_URL_PREFIX.self::USER_INFO_URL.'access_token='.$this->access_token.'&openid='.$openid);</li> <li> if($result)</li> <li> {</li> <li> $jsonArr = json_decode($result, true);</li> <li> if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);</li> <li> else return $jsonArr;</li> <li> }</li> <li> </li> <li> return false;</li> <li> } </li> <li> </li> <li> </li> <li> /**</li> <li> * フォロワーリストを取得します </li> <li> * @param string $next_openid プルする最初の OPENID、入力されていない場合は、デフォルトで最初からプルを開始します </li> <li>*/</li> <li> public function getUserList($next_openid='')</li> <li> {</li> <li> if(!$this->access_token && !$this->checkAuth()) return false;</li> <li> </li> <li> $result =curlRequest(self::API_URL_PREFIX.self::USER_GET_URL.'access_token='.$this->access_token.'&next_openid='.$next_openid);</li> <li> if($result)</li> <li> {</li> <li> $jsonArr = json_decode( $result, true);</li> <li> if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);</li> <li> else return $jsonArr;</li> <li> }</li> <li> </li> <li> return false;</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * クエリのグループ化 </li> <li>*/</li> <li> public function getGroup()</li> <li> {</li> <li> if(!$this->access_token && !$this-> checkAuth()) return false;</li> <li> </li> <li> $result =curlRequest(self::API_URL_PREFIX.self::GROUPS_GET_URL.'access_token='.$this->access_token);</li> <li> if($result)</li> <li> {</li> <li> $jsonArr = json_decode ($result, true);</li> <li> if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr); </li> <li>それ以外の場合は return $jsonArr;</li> <li> }</li> <li> </li> <li> return false;</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * グループを作成する </li> <li> * @param string $name グループ名(30文字以内) </li> <li>*/</li> <li> public function createGroup($name)</li> <li> {</li> <li> if(!$this->access_token && !$this->checkAuth()) return false;</li> <li> $data = array ('group' => array('name' => $name));</li> <li> $result =curlRequest(self::API_URL_PREFIX.self::GROUPS_CREATE_URL.'access_token='.$this->access_token, $this ->jsonEncode($data), 'post');</li> <li> if($result)</li> <li> {</li> <li> $jsonArr = json_decode($result, true);</li> <li> if(!$jsonArr || (isset($jsonArr['errcode ']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);</li> <li> else return true;</li> <li> }</li> <li> </li> <li> return false;</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * グループ名を変更します </li> <li> * @param int $id WeChat によって割り当てられるグループ ID </li> <li> * @param string $name グループ名 (30 文字以内) </li> <li> */</li> <li> public function updateGroup($id, $name)</li> <li> {</li> <li> if(!$this->access_token && !$this->checkAuth()) return false;</li> <li> </li> <li> $data = array('group' = > array('id' => $id, 'name' => $name));</li> <li> $result =curlRequest(self::API_URL_PREFIX.self::GROUPS_UPDATE_URL.'access_token='.$this-> access_token, $this->jsonEncode($data), 'post');</li> <li> if($result)</li> <li> {</li> <li> $jsonArr = json_decode($result, true);</li> <li> if(!$jsonArr || (isset($ jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);</li> <li> else return true;</li> <li> }</li> <li> </li> <li> return false;</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * モバイルユーザーグループ</li> <li> * </li> <li> * @param string $openid ユーザー固有の識別子</li> <li> * @param int $to_groupid グループ ID</li> <li>*/</li> <li> public function updateGroupMembers($openid, $to_groupid) </li> <li> {</li> <li> if(!$this->access_token && !$this->checkAuth()) return false;</li> <li> </li> <li> $data = array('openid' => $openid, 'to_groupid' => $to_groupid );</li> <li> $result =curlRequest(self::API_URL_PREFIX.self::GROUPS_MEMBERS_UPDATE_URL.'access_token='.$this->access_token, $this->jsonEncode($data), 'post');</li> <li> if($ result)</li> <li> {</li> <li> $jsonArr = json_decode($result, true);</li> <li> if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this ->error($jsonArr);</li> <li> else return true;</li> <li> }</li> <li> </li> <li> return false;</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * 発信客メッセージ</li> <li> *当用户主活動発信メッセージ给公众号的時刻(発信送信情報を含む) 、点击自定义菜单clikeイベント、订阅イベント、扫描二维コードイベント、支付成功イベント、用户维权)、</li> <li> * 微信将会はメッセージデータ推送を送信者、送信者は一段階の時間内(現在は24時間)ゲスト メッセージ インターフェイスを使用して、JSON データ パケットの POST を介して一般ユーザーにメッセージを送信し、24 時間以内に送信回数を制限することができます。よりお得なサービスを提供します。</li> <li> * </li> <li> * @param string $touser 通常ユーザー openid</li> <li> */</li> <li> public function sendCustomMessage($touser, $data, $msgType = 'text')</li> <li> {</li> <li> $arr = array();</li> <li> $arr['touser' ] = $touser;</li> <li> $arr['msgtype'] = $msgType;</li> <li> switch ($msgType)</li> <li> {</li> <li> case 'text': // テキストメッセージを送信します</li> <li> $arr['text']['content'] = $data; </li> <li> Break;</li> <li> </li> <li> case 'image': // 画像メッセージを送信します </li> <li> $arr['image']['media_id'] = $data;</li> <li> Break;</li> <li> </li> <li> case 'voice': // 画像メッセージを送信します音声メッセージ </li> <li> $arr['voice']['media_id'] = $data;</li> <li> Break;</li> <li> </li> <li> case 'video': // ビデオメッセージを送信 </li> <li> $arr['video']['media_id'] = $data [' media_id'] // 送信されたビデオのメディア ID </li> <li> $arr['video']['thumb_media_id'] = $data['thumb_media_id'] // ビデオのサムネイルのメディア ID </li> <li>; </li> <li> case 'music ': //音楽メッセージを送信</li> <li> $arr['music']['title'] = $data['title'];//音楽タイトル</li> <li> $arr['music']['description'] = $data[ 'description'];// 音楽の説明</li> <li> $arr['music']['musicurl'] = $data['musicurl'];// 音楽リンク</li> <li> $arr['music']['hqmusicurl '] = $ data['hqmusicurl'];// 高品質の音楽リンク。Wi-Fi 環境では、このリンクを使用して音楽を再生することが優先されます</li> <li> $arr['music']['thumb_media_id'] = $data[' title'];// サムネイル メディア ID</li> <li> Break;</li> <li> </li> <li> case 'news': // グラフィック メッセージを送信</li> <li> $arr['news']['articles'] = $data; // タイトル、説明、URL、picurl; </li> <li> Break;</li> <li> } </li> <li> </li> <li> if(!$this->access_token && !$this->checkAuth()) return false;</li> <li> </li> <li> $result =curlRequest(self::API_URL_PREFIX.self::MESSAGE_CUSTOM_SEND_URL.'access_token= '.$this->access_token, $this->jsonEncode($arr), 'post');</li> <li> if($result)</li> <li> {</li> <li> $jsonArr = json_decode($result, true);</li> <li> if(!$ jsonArr || (isset($ jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);</li> <li> else return true;</li> <li> }</li> <li> return false; </li> <li> }</li> <li> </li> <li> </li> <li> </li> <li> / **</li> <li> * access_token を取得します</li> <li>*/</li> <li> public function checkAuth()</li> <li> {</li> <li> </li> <li> // キャッシュから access_token を取得します</li> <li> $cache_flag = 'weixin_access_token';</li> <li> $access_token =cache($cache_flag);</li> <li> if ($access_token) </li> <li> { </li> <li> $this->access_token = $access_token;</li> <li> return true;</li> <li> }</li> <li> </li> <li> // WeChat サーバーに access_token の取得をリクエストします </li> <li> $result =curlRequest(self::API_URL_PREFIX.self::AUTH_URL. 'appid='.$this->appid.'&secret='.$this->appsecret);</li> <li> if($result)</li> <li> {</li> <li> $jsonArr = json_decode($result, true);</li> <li> if(!$ jsonArr || (isset($jsonArr ['errcode']) && $jsonArr['errcode'] > 0))</li> <li> {</li> <li> $this->error($jsonArr);</li> <li> }</li> <li> else</li> <li> {</li> <li> $this ->access_token = $jsonArr['access_token'];</li> <li> $expire = isset($jsonArr['expires_in']) intval($jsonArr['expires_in'])-100 : 3600;</li> <li> // access_token をキャッシュに保存します</li> <li>ache($cache_flag, $this->access_token, $expire, Cache::FILE); </li> <li> return true;</li> <li> }</li> <li> }</li> <li> return false;</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * WeChat oauth ログイン->ステップ 1: ユーザーの同意 認可、コードを取得します</li> <li> * アプリケーション認可スコープ、snsapi_base (認可ページはポップアップしません。直接ジャンプします。ユーザーの openid のみを取得できます)、</li> <li> * snsapi_userinfo (認可ページがポップアップします。 openid を通じてニックネーム、性別、場所を取得します)。また、ユーザーをフォローしていない場合でも、ユーザーが許可している限り、その情報を取得することができます)</li> <li> * WeChat上で直接リンクを開く場合、このパラメータを入力する必要はありません。ページ 302 リダイレクトを行うときは、このパラメータを指定する必要があります</li> <li> * </li> <li> * @param string $redirect_uri 認可後のリダイレクトのコールバック リンク アドレス</li> <li> * @param string $scope アプリケーション認可スコープ 0 は snsapi_base、1 は snsapi_userinfo</li> <li> * @param string $state はリダイレクト後の状態パラメーターをもたらします。開発者は任意のパラメーター値を入力できます</li> <li> */</li> <li> public function redirectGetOauthCode($redirect_uri, $scope=0, $state='')</li> <li> {</li> <li> $scope = ($scope ==) 0) ? 'snsapi_base' : 'snsapi_userinfo';</li> <li> $url = self::CONNECT_OAUTH_AUTHORIZE_URL.'appid='.$this->appid.'&redirect_uri='.urlencode($redirect_uri).'&response_type=code&scope= '。 $scope.'&state='.$state.'#wechat_redirect';</li> <li> redirect($url);</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * WeChat oauth ログイン-> ステップ 2: Web ページ認証用のコードを交換します access_token</li> <li> * </li> <li> * @param string $code</li> <li>*/</li> <li> public function getSnsAccessToken($code)</li> <li> {</li> <li> $ result = curlRequest(self::SNS_OAUTH_ACCESS_TOKEN_URL.'appid='.$this->appid.'&secret='.$this->appsecret.'&code='.$code.'&grant_type=authorization_code');</li> <li> if ($ result)</li> <li> {</li> <li> $jsonArr = json_decode($result, true);</li> <li> if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this ->error($jsonArr);</li> <li> else return $jsonArr;</li> <li> }</li> <li> </li> <li> return false;</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * WeChat oauth ログイン -> ステップ 3: access_token を更新する (必要な場合) </li> <li> * access_token の有効期間が短いため、access_token がタイムアウトになった場合は、refresh_token を使用して更新できます </li> <li> * fresh_token の有効期間は長くなります (7日、30 日、60 日、90 日)、refresh_token の有効期限が切れると、ユーザーは再認証する必要があります。 </li> <li> * </li> <li> * @param string $refresh_token access_token</li> <li>で取得したrefresh_tokenパラメータを記入します*/</li> <li> public function RefershToken($refresh_token)</li> <li> {</li> <li> $result =curlRequest (self::SNS_OAUTH_REFRESH_TOKEN_URL.'appid='.$this->appid.'&grant_type=refresh_token&refresh_token='.$refresh_token);</li> <li> if($result)</li> <li> {</li> <li> $jsonArr = json_decode($result, true) ;</li> <li> if(!$jsonArr || (isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);</li> <li> else return $jsonArr; } </li> <li> </li> <li> return false;</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * WeChat oauth ログイン -> ステップ 4: ユーザー情報を取得します (スコープ snsapi_userinfo が必要です)</li> <li> * Web ページの認証スコープが snsapi_userinfo の場合、開発者は access_token と openid を通じてユーザー情報を取得できるようになります。 </li> <li> * </li> <li> * @param string $access_token Web ページ認証インターフェイス呼び出し証明書、注意: この access_token は、サポートされている基本的な access_token とは異なります</li> <li> * @param string $openid ユーザーの一意の識別子</li> <li>*/</li> <li> public function getSnsUserInfo($access_token, $openid)</li> <li> {</li> <li> $result =curlRequest(self::SNS_USERINFO_URL.'access_token='.$ access_token. '&openid='.$openid);</li> <li> if($result)</li> <li> {</li> <li> $jsonArr = json_decode($result, true);</li> <li> if(!$jsonArr || (isset($jsonArr['errcode']) && $ jsonArr['errcode'] > 0)) $this->error($jsonArr);</li> <li> else return $jsonArr;</li> <li> }</li> <li> </li> <li> return false;</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * QRコードチケットを作成します</li> <li> * QRコードチケットを作成するたびに、開発者によって設定されたパラメータ(scene_id)を提供する必要があります 一時的なQRコードと永続的なQRコードのQRコードチケットを作成するプロセスが紹介されています。それぞれ。 </li> <li> * </li> <li> * @param int $scene_id シーン値 ID、一時的な QR コードの場合は 32 ビット整数、永続的な QR コードの場合は最大値は 1000 です</li> <li> * @param int $type QR コードのタイプ、0 は一時的、1 は永続的です</li> <li> * @param int $expire この QR コードの有効期間 (秒単位)。 最大数は 1800 を超えません。 </li> <li>*/ </li> <li> public function createQrcode($scene_id, $type=0, $expire=1800)</li> <li> {</li> <li> if(!$this->access_token && !$this->checkAuth()) return false;</li> <li> </li> <li> $data = array () ;</li> <li> $data['action_info'] = array('scene' => array('scene_id' => $scene_id));</li> <li> $data['action_name'] = ($type == 0 ? ' QR_SCENE' : 'QR_LIMIT_SCENE');</li> <li> if($type == 0) $data['expire_秒'] = $expire;</li> <li> </li> <li> $result =curlRequest(self::API_URL_PREFIX.self::QRCODE_CREATE_URL.'access_token='. $this ->access_token, $this->jsonEncode($data), 'post');</li> <li> if($result)</li> <li> {</li> <li> $jsonArr = json_decode($result, true);</li> <li> if(!$jsonArr | | ( isset($jsonArr['errcode']) && $jsonArr['errcode'] > 0)) $this->error($jsonArr);</li> <li> else return $jsonArr;</li> <li> }</li> <li> </li> <li> return false;</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * チケットを QR コードに交換</li> <li> * QR コード チケットを取得した後、開発者はチケットを QR コード画像と交換できます。このインターフェースはログインせずに呼び出すことができることに注意してください。 </li> <li> * リマインダー: UrlEncode TICKET を忘れないでください</li> <li> * チケットが正しい場合、http リターン コードは 200 です。これは画像であり、直接表示またはダウンロードできます。 </li> <li> ※エラー(無効なチケット等)の場合はHTTPエラーコード404が返されます。</li> <li> * </li> <li> * @param string $ticket</li> <li> */</li> <li> public function getQrcodeUrl($ticket)</li> <li> {</li> <li> return self::SHOW_QRCODE_URL.'ticket='.urlencode($ticket);</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * インターフェースによって生成されたエラーログを記録します</li> <li>*/</li> <li> public function error($data)</li> <li> {</li> <li> $this->errCode = $data['errcode'];</li> <li> $this->errMsg = $data['errmsg'];</li> <li> Log::info ('WEIXIN API errcode:['.$this->errCode.'] errmsg:['.$this->errMsg.']');</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * 配列内の中国語をjsonデータに変換します</li> <li> * @param array $arr</li> <li>*/</li> <li> public function jsonEncode($arr) {</li> <li> $parts = array ();</li> <li> $is_list = false;</li> <li> //指定された配列が数値配列かどうかを調べます</li> <li> $keys = array_keys ( $arr );</li> <li> $max_length = count ( $arr ) - 1;</li> <li> if (($keys [0] === 0) && ($keys [$max_length] === $max_length )) { //最初のキーが 0 で最後のキーが length であるかどうかを確認します- 1</li> <li> $is_list = true;</li> <li> for($i = 0; $i < count ( $keys ); $i ++) { //各キーがその位置に対応するかどうかを確認します<li> if ($i != $ keys [$i]) { //キーは位置チェックに失敗します<li> $is_list = false; //連想配列です<li> Break;<li> }<li> }<li> }<li> foreach ( $arr as $key => $value ) {</li> <li> if (is_array ( $value )) { // 配列のカスタム処理</li> <li> if ($is_list)</li> <li> $parts [] = $this->jsonEncode ( $value ); /* :RECURSION: */</li> <li> else</li> <li> $parts [] = '"' . $key . '":' . $this->jsonEncode ( $value ); /* :RECURSION: */</li> <li> } else {</li> <li> $str = '';</li> <li> if (! $is_list)</li> <li> $str = '"' . $key . '":';</li> <li> //複数のデータ型のカスタム処理</li> <li> if (is_numeric ( $value ) && $value $str .= $value; //数値</li> <li> elseif ($value === false)</li> <li> $str .= 'false'; //ブール値</li> <li> elseif ($value === true)</li> <li> $str .= 'true';</li> <li> else</li> <li> $str .= '"' .addlashes ( $value ) . '"'; //その他すべて</li> <li> // :TODO: 他に注意すべきデータ型はありますか? (オブジェクト?)</li> <li> $parts [] = $str;</li> <li> }</li> <li> }</li> <li> $json = implode ( ',', $parts );</li> <li> if ($is_list)</li> <li> return '[' 。 $json 。 ']'; //数値の JSON</li> <li> return '{' を返します。 $json 。 '}'; //連想JSONを返す</li> <li> }</li> <li> <li> </li> <li> /**</li> <li> * 署名を確認します </li> <li>*/</li> <li> public function checkSignature()</li> <li> {</li> <li> $signature = HttpRequest::getGet('signature');</li> <li> $timestamp = HttpRequest::getGet('タイムスタンプ');</li> <li> $nonce = HttpRequest::getGet('nonce');</li> <li> </li> <li> $token = $this->token;</li> <li> $tmpArr = array($token, $timestamp, $nonce);</li> <li> sort($ tmpArr);</li> <li> $tmpStr = implode($tmpArr);</li> <li> $tmpStr = sha1($tmpStr);</li> <li> </li> <li> return ($tmpStr == $signature ? true : false);</li> <li> }</li> <li> </li> <li> </li> <li> /**</li> <li> * トークンが有効かどうかを確認します</li> <li> */</li> <li> public function valid()</li> <li> {</li> <li> if($this->checkSignature()) exit(HttpRequest::getGet('echostr'));</li> <li> }</li> <li> </li> <li>}</li> </ol></div> <em onclick="copycode($('code_ZWw'));">复制代</em> </div> </td></tr></table> <div id="comment_51454" class="cm"> </div> <div id="post_rate_div_51454"></div> <br><br> </div> </div> <div style="height: 25px;"> <div class="wzconBq" style="display: inline-flex;"> <span>関連ラベル:</span> <div class="wzcbqd"> <a onclick="hits_log(2,'www',this);" href-data="//m.sbmmt.com/ja/search?word=基于eaglephp框架v27开发的微信50最新最全的api接口" target="_blank">基于EaglePHP框架v2.7开发的微信5.0最新最全的API接口</a> </div> </div> <div style="display: inline-flex;float: right; color:#333333;">ソース:php.cn</div> </div> <div class="wzconOtherwz"> <a href="//m.sbmmt.com/ja/faq/314409.html" title="WeChatスキャンログイン"> <span>前の記事:WeChatスキャンログイン</span> </a> <a href="//m.sbmmt.com/ja/faq/314425.html" title="重み計算は、わずかに変更を加えれば、単語の分割、単語の頻度統計、全文およびスパムの検出などにも使用できます。"> <span>次の記事:重み計算は、わずかに変更を加えれば、単語の分割、単語の頻度統計、全文およびスパムの検出などにも使用できます。</span> </a> </div> <div class="wzconShengming"> <div class="bzsmdiv">このウェブサイトの声明</div> <div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div> </div> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="2507867629"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <div class="wzconZzwz"> <div class="wzconZzwztitle">著者別の最新記事</div> <ul> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="//m.sbmmt.com/ja/faq/1796639331.html">NullPointerException とは何ですか?どのように修正すればよいですか?</a> </div> <div>2024-10-22 09:46:29</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="//m.sbmmt.com/ja/faq/1796629482.html">初心者からプログラマーへ: 旅は C の基礎から始まります</a> </div> <div>2024-10-13 13:53:41</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="//m.sbmmt.com/ja/faq/1796628545.html">PHP による Web 開発のロックを解除する: 初心者ガイド</a> </div> <div>2024-10-12 12:15:51</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="//m.sbmmt.com/ja/faq/1796627928.html">C の謎を解く: 新人プログラマーのための明確でシンプルな道</a> </div> <div>2024-10-11 22:47:31</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="//m.sbmmt.com/ja/faq/1796627806.html">コーディングの可能性を解き放つ: まったくの初心者のための C プログラミング</a> </div> <div>2024-10-11 19:36:51</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="//m.sbmmt.com/ja/faq/1796627670.html">内なるプログラマーを解き放つ: まったくの初心者のための C</a> </div> <div>2024-10-11 15:50:41</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="//m.sbmmt.com/ja/faq/1796627643.html">C で生活を自動化する: 初心者向けのスクリプトとツール</a> </div> <div>2024-10-11 15:07:41</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="//m.sbmmt.com/ja/faq/1796627620.html">PHP を簡単に: Web 開発の最初のステップ</a> </div> <div>2024-10-11 14:21:21</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="//m.sbmmt.com/ja/faq/1796627574.html">Python で何でも構築: 創造性を解き放つための初心者ガイド</a> </div> <div>2024-10-11 12:59:11</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="//m.sbmmt.com/ja/faq/1796627539.html">コーディングの鍵: 初心者のための Python の力を解き放つ</a> </div> <div>2024-10-11 12:17:31</div> </li> </ul> </div> <div class="wzconZzwz"> <div class="wzconZzwztitle">最新の問題</div> <div class="wdsyContent"> <div class="wdsyConDiv flexRow wdsyConDiv1"> <div class="wdcdContent flexColumn"> <a href="//m.sbmmt.com/ja/wenda/176411.html" target="_blank" title="function_exists() はカスタム関数を決定できません" class="wdcdcTitle">function_exists() はカスタム関数を決定できません</a> <a href="//m.sbmmt.com/ja/wenda/176411.html" class="wdcdcCons">Function test () {return true;} if (function_exists ('test')) {echo "テストは関数です";</a> <div class="wdcdcInfo flexRow"> <div class="wdcdcileft"> <span class="wdcdciSpan"> から 2024-04-29 11:01:01</span> </div> <div class="wdcdciright flexRow"> <div class="wdcdcirdz flexRow ira"> <b class="wdcdcirdzi"></b>0 </div> <div class="wdcdcirpl flexRow ira"><b class="wdcdcirpli"></b>3</div> <div class="wdcdcirwatch flexRow ira"><b class="wdcdcirwatchi"></b>2283</div> </div> </div> </div> </div> <div class="wdsyConLine wdsyConLine2"></div> <div class="wdsyConDiv flexRow wdsyConDiv1"> <div class="wdcdContent flexColumn"> <a href="//m.sbmmt.com/ja/wenda/176410.html" target="_blank" title="Google Chromeのモバイル版を表示する方法" class="wdcdcTitle">Google Chromeのモバイル版を表示する方法</a> <a href="//m.sbmmt.com/ja/wenda/176410.html" class="wdcdcCons">こんにちは、先生、Google Chrome をモバイル版に変更するにはどうすればよいですか?</a> <div class="wdcdcInfo flexRow"> <div class="wdcdcileft"> <span class="wdcdciSpan"> から 2024-04-23 00:22:19</span> </div> <div class="wdcdciright flexRow"> <div class="wdcdcirdz flexRow ira"> <b class="wdcdcirdzi"></b>0 </div> <div class="wdcdcirpl flexRow ira"><b class="wdcdcirpli"></b>11</div> <div class="wdcdcirwatch flexRow ira"><b class="wdcdcirwatchi"></b>2417</div> </div> </div> </div> </div> <div class="wdsyConLine wdsyConLine2"></div> <div class="wdsyConDiv flexRow wdsyConDiv1"> <div class="wdcdContent flexColumn"> <a href="//m.sbmmt.com/ja/wenda/176407.html" target="_blank" title="子ウィンドウは親ウィンドウを操作しますが、出力は応答しません。" class="wdcdcTitle">子ウィンドウは親ウィンドウを操作しますが、出力は応答しません。</a> <a href="//m.sbmmt.com/ja/wenda/176407.html" class="wdcdcCons">最初の 2 つの文は実行可能ですが、最後の文は実装できません。</a> <div class="wdcdcInfo flexRow"> <div class="wdcdcileft"> <span class="wdcdciSpan"> から 2024-04-19 15:37:47</span> </div> <div class="wdcdciright flexRow"> <div class="wdcdcirdz flexRow ira"> <b class="wdcdcirdzi"></b>0 </div> <div class="wdcdcirpl flexRow ira"><b class="wdcdcirpli"></b>1</div> <div class="wdcdcirwatch flexRow ira"><b class="wdcdcirwatchi"></b>2034</div> </div> </div> </div> </div> <div class="wdsyConLine wdsyConLine2"></div> <div class="wdsyConDiv flexRow wdsyConDiv1"> <div class="wdcdContent flexColumn"> <a href="//m.sbmmt.com/ja/wenda/176406.html" target="_blank" title="親ウィンドウには出力がありません" class="wdcdcTitle">親ウィンドウには出力がありません</a> <a href="//m.sbmmt.com/ja/wenda/176406.html" class="wdcdcCons">document.onclick = function(){ window.opener.document.write('私は子ウィンドウの出力です');</a> <div class="wdcdcInfo flexRow"> <div class="wdcdcileft"> <span class="wdcdciSpan"> から 2024-04-18 23:52:34</span> </div> <div class="wdcdciright flexRow"> <div class="wdcdcirdz flexRow ira"> <b class="wdcdcirdzi"></b>0 </div> <div class="wdcdcirpl flexRow ira"><b class="wdcdcirpli"></b>1</div> <div class="wdcdcirwatch flexRow ira"><b class="wdcdcirwatchi"></b>1919</div> </div> </div> </div> </div> <div class="wdsyConLine wdsyConLine2"></div> <div class="wdsyConDiv flexRow wdsyConDiv1"> <div class="wdcdContent flexColumn"> <a href="//m.sbmmt.com/ja/wenda/176405.html" target="_blank" title="CSS マインド マッピングに関するコースウェアはどこにありますか?" class="wdcdcTitle">CSS マインド マッピングに関するコースウェアはどこにありますか?</a> <a href="//m.sbmmt.com/ja/wenda/176405.html" class="wdcdcCons">コースウェア</a> <div class="wdcdcInfo flexRow"> <div class="wdcdcileft"> <span class="wdcdciSpan"> から 2024-04-16 10:10:18</span> </div> <div class="wdcdciright flexRow"> <div class="wdcdcirdz flexRow ira"> <b class="wdcdcirdzi"></b>0 </div> <div class="wdcdcirpl flexRow ira"><b class="wdcdcirpli"></b>0</div> <div class="wdcdcirwatch flexRow ira"><b class="wdcdcirwatchi"></b>1991</div> </div> </div> </div> </div> <div class="wdsyConLine wdsyConLine2"></div> </div> </div> <div class="wzconZt" > <div class="wzczt-title"> <div>関連トピック</div> <a href="//m.sbmmt.com/ja/faq/zt" target="_blank">詳細> </a> </div> <div class="wzcttlist"> <ul> <li class="ul-li"> <a target="_blank" href="//m.sbmmt.com/ja/faq/dyplqdtpzmbcd"><img src="https://img.php.cn/upload/subject/202407/22/2024072212083868148.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="Douyinコメントエリアの写真を携帯電話に保存する方法" /> </a> <a target="_blank" href="//m.sbmmt.com/ja/faq/dyplqdtpzmbcd" class="title-a-spanl" title="Douyinコメントエリアの写真を携帯電話に保存する方法"><span>Douyinコメントエリアの写真を携帯電話に保存する方法</span> </a> </li> <li class="ul-li"> <a target="_blank" href="//m.sbmmt.com/ja/faq/qsszhbjyspm"><img src="https://img.php.cn/upload/subject/202407/22/2024072213241093873.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="デジタル通貨取引所ランキングトップ10" /> </a> <a target="_blank" href="//m.sbmmt.com/ja/faq/qsszhbjyspm" class="title-a-spanl" title="デジタル通貨取引所ランキングトップ10"><span>デジタル通貨取引所ランキングトップ10</span> </a> </li> <li class="ul-li"> <a target="_blank" href="//m.sbmmt.com/ja/faq/headerhsfhsb"><img src="https://img.php.cn/upload/subject/202407/22/2024072213592869651.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="ヘッダ関数が404失敗を返す理由" /> </a> <a target="_blank" href="//m.sbmmt.com/ja/faq/headerhsfhsb" class="title-a-spanl" title="ヘッダ関数が404失敗を返す理由"><span>ヘッダ関数が404失敗を返す理由</span> </a> </li> <li class="ul-li"> <a target="_blank" href="//m.sbmmt.com/ja/faq/mgtvcj"><img src="https://img.php.cn/upload/subject/202407/22/2024072214333441129.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="Mango TV プラグイン" /> </a> <a target="_blank" href="//m.sbmmt.com/ja/faq/mgtvcj" class="title-a-spanl" title="Mango TV プラグイン"><span>Mango TV プラグイン</span> </a> </li> <li class="ul-li"> <a target="_blank" href="//m.sbmmt.com/ja/faq/javabeansx"><img src="https://img.php.cn/upload/subject/202407/22/2024072213415733362.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="Javabeanの属性とは何ですか?" /> </a> <a target="_blank" href="//m.sbmmt.com/ja/faq/javabeansx" class="title-a-spanl" title="Javabeanの属性とは何ですか?"><span>Javabeanの属性とは何ですか?</span> </a> </li> <li class="ul-li"> <a target="_blank" href="//m.sbmmt.com/ja/faq/wapllq"><img src="https://img.php.cn/upload/subject/202407/22/2024072214370581774.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="ワップブラウザ" /> </a> <a target="_blank" href="//m.sbmmt.com/ja/faq/wapllq" class="title-a-spanl" title="ワップブラウザ"><span>ワップブラウザ</span> </a> </li> <li class="ul-li"> <a target="_blank" href="//m.sbmmt.com/ja/faq/pythonhcjjxxx"><img src="https://img.php.cn/upload/subject/202407/22/2024072212232616517.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="PythonとC++学習の費用対効果分析" /> </a> <a target="_blank" href="//m.sbmmt.com/ja/faq/pythonhcjjxxx" class="title-a-spanl" title="PythonとC++学習の費用対効果分析"><span>PythonとC++学習の費用対効果分析</span> </a> </li> <li class="ul-li"> <a target="_blank" href="//m.sbmmt.com/ja/faq/macdzssm"><img src="https://img.php.cn/upload/subject/202407/22/2024072214263159589.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="MACアドレスとは何ですか" /> </a> <a target="_blank" href="//m.sbmmt.com/ja/faq/macdzssm" class="title-a-spanl" title="MACアドレスとは何ですか"><span>MACアドレスとは何ですか</span> </a> </li> </ul> </div> </div> </div> </div> <div class="phpwzright"> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5902227090019525" data-ad-slot="3653428331" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <div class="wzrOne"> <div class="wzroTitle">人気のおすすめ</div> <div class="wzroList"> <ul> <li> <div class="wzczzwzli"> <span class="layui-badge-dots wzrolr"></span> <a style="height: auto;" title="Mac コンピュータでホストをセットアップする方法 (画像とテキスト付きの手順)" href="//m.sbmmt.com/ja/faq/448310.html">Mac コンピュータでホストをセットアップする方法 (画像とテキスト付きの手順)</a> </div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots wzrolr"></span> <a style="height: auto;" title="PHP を使用してシンプルな QQ ロボットをすばやく構築する" href="//m.sbmmt.com/ja/faq/448391.html">PHP を使用してシンプルな QQ ロボットをすばやく構築する</a> </div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots wzrolr"></span> <a style="height: auto;" title="API共通の署名検証方法(PHP実装)" href="//m.sbmmt.com/ja/faq/448286.html">API共通の署名検証方法(PHP実装)</a> </div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots wzrolr"></span> <a style="height: auto;" title="PHP における一般的な日付と時刻の操作のコレクション" href="//m.sbmmt.com/ja/faq/448309.html">PHP における一般的な日付と時刻の操作のコレクション</a> </div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots wzrolr"></span> <a style="height: auto;" title="PHP はグラフィック検証コードを生成します (拡張干渉タイプ)" href="//m.sbmmt.com/ja/faq/448308.html">PHP はグラフィック検証コードを生成します (拡張干渉タイプ)</a> </div> </li> </ul> </div> </div> <script src="https://sw.php.cn/hezuo/cac1399ab368127f9b113b14eb3316d0.js" type="text/javascript"></script> <div class="wzrThree"> <div class="wzrthree-title"> <div>人気のチュートリアル</div> <a target="_blank" href="//m.sbmmt.com/ja/course.html">詳細> </a> </div> <div class="wzrthreelist swiper2"> <div class="wzrthreeTab swiper-wrapper"> <div class="check tabdiv swiper-slide" data-id="one">関連するチュートリアル <div></div></div> <div class="tabdiv swiper-slide" data-id="two">人気のおすすめ<div></div></div> <div class="tabdiv swiper-slide" data-id="three">最新のコース<div></div></div> </div> <ul class="one"> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/812.html" title="最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/041/620debc3eab3f377.jpg" alt="最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)"/> </a> <div class="wzrthree-right"> <a target="_blank" title="最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)" href="//m.sbmmt.com/ja/course/812.html">最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)</a> <div class="wzrthreerb"> <div>1424392 <b class="kclbcollectb"></b></div> <div class="courseICollection" data-id="812"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/74.html" title="PHP 入門チュートリアル 1: 1 週間で PHP を学ぶ" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/6253d1e28ef5c345.png" alt="PHP 入門チュートリアル 1: 1 週間で PHP を学ぶ"/> </a> <div class="wzrthree-right"> <a target="_blank" title="PHP 入門チュートリアル 1: 1 週間で PHP を学ぶ" href="//m.sbmmt.com/ja/course/74.html">PHP 入門チュートリアル 1: 1 週間で PHP を学ぶ</a> <div class="wzrthreerb"> <div>4270704 <b class="kclbcollectb"></b></div> <div class="courseICollection" data-id="74"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/286.html" title="JAVA 初心者向けビデオチュートリアル" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/62590a2bacfd9379.png" alt="JAVA 初心者向けビデオチュートリアル"/> </a> <div class="wzrthree-right"> <a target="_blank" title="JAVA 初心者向けビデオチュートリアル" href="//m.sbmmt.com/ja/course/286.html">JAVA 初心者向けビデオチュートリアル</a> <div class="wzrthreerb"> <div>2548769 <b class="kclbcollectb"></b></div> <div class="courseICollection" data-id="286"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/504.html" title="Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/62590a67ce3a6655.png" alt="Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル"/> </a> <div class="wzrthree-right"> <a target="_blank" title="Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル" href="//m.sbmmt.com/ja/course/504.html">Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル</a> <div class="wzrthreerb"> <div>508023 <b class="kclbcollectb"></b></div> <div class="courseICollection" data-id="504"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/2.html" title="PHP ゼロベースの入門チュートリアル" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/6253de27bc161468.png" alt="PHP ゼロベースの入門チュートリアル"/> </a> <div class="wzrthree-right"> <a target="_blank" title="PHP ゼロベースの入門チュートリアル" href="//m.sbmmt.com/ja/course/2.html">PHP ゼロベースの入門チュートリアル</a> <div class="wzrthreerb"> <div>863693 <b class="kclbcollectb"></b></div> <div class="courseICollection" data-id="2"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> </ul> <ul class="two" style="display: none;"> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/812.html" title="最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/041/620debc3eab3f377.jpg" alt="最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)"/> </a> <div class="wzrthree-right"> <a target="_blank" title="最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)" href="//m.sbmmt.com/ja/course/812.html">最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)</a> <div class="wzrthreerb"> <div >1424392 回の学習</div> <div class="courseICollection" data-id="812"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/286.html" title="JAVA 初心者向けビデオチュートリアル" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/62590a2bacfd9379.png" alt="JAVA 初心者向けビデオチュートリアル"/> </a> <div class="wzrthree-right"> <a target="_blank" title="JAVA 初心者向けビデオチュートリアル" href="//m.sbmmt.com/ja/course/286.html">JAVA 初心者向けビデオチュートリアル</a> <div class="wzrthreerb"> <div >2548769 回の学習</div> <div class="courseICollection" data-id="286"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/504.html" title="Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/62590a67ce3a6655.png" alt="Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル"/> </a> <div class="wzrthree-right"> <a target="_blank" title="Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル" href="//m.sbmmt.com/ja/course/504.html">Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル</a> <div class="wzrthreerb"> <div >508023 回の学習</div> <div class="courseICollection" data-id="504"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/901.html" title="Web フロントエンド開発の簡単な紹介" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/067/64be28a53a4f6310.png" alt="Web フロントエンド開発の簡単な紹介"/> </a> <div class="wzrthree-right"> <a target="_blank" title="Web フロントエンド開発の簡単な紹介" href="//m.sbmmt.com/ja/course/901.html">Web フロントエンド開発の簡単な紹介</a> <div class="wzrthreerb"> <div >215964 回の学習</div> <div class="courseICollection" data-id="901"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/234.html" title="PSビデオチュートリアルをゼロからマスターする" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/62611f57ed0d4840.jpg" alt="PSビデオチュートリアルをゼロからマスターする"/> </a> <div class="wzrthree-right"> <a target="_blank" title="PSビデオチュートリアルをゼロからマスターする" href="//m.sbmmt.com/ja/course/234.html">PSビデオチュートリアルをゼロからマスターする</a> <div class="wzrthreerb"> <div >892416 回の学習</div> <div class="courseICollection" data-id="234"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> </ul> <ul class="three" style="display: none;"> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/1648.html" title="[Web フロントエンド] Node.js クイック スタート" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/067/662b5d34ba7c0227.png" alt="[Web フロントエンド] Node.js クイック スタート"/> </a> <div class="wzrthree-right"> <a target="_blank" title="[Web フロントエンド] Node.js クイック スタート" href="//m.sbmmt.com/ja/course/1648.html">[Web フロントエンド] Node.js クイック スタート</a> <div class="wzrthreerb"> <div >7665 回の学習</div> <div class="courseICollection" data-id="1648"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/1647.html" title="海外のWeb開発フルスタックコースの完全なコレクション" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/067/6628cc96e310c937.png" alt="海外のWeb開発フルスタックコースの完全なコレクション"/> </a> <div class="wzrthree-right"> <a target="_blank" title="海外のWeb開発フルスタックコースの完全なコレクション" href="//m.sbmmt.com/ja/course/1647.html">海外のWeb開発フルスタックコースの完全なコレクション</a> <div class="wzrthreerb"> <div >6135 回の学習</div> <div class="courseICollection" data-id="1647"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/1646.html" title="Go言語実践GraphQL" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/067/662221173504a436.png" alt="Go言語実践GraphQL"/> </a> <div class="wzrthree-right"> <a target="_blank" title="Go言語実践GraphQL" href="//m.sbmmt.com/ja/course/1646.html">Go言語実践GraphQL</a> <div class="wzrthreerb"> <div >5069 回の学習</div> <div class="courseICollection" data-id="1646"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/1645.html" title="550W ファンマスターが JavaScript をゼロから段階的に学習します" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/067/662077e163124646.png" alt="550W ファンマスターが JavaScript をゼロから段階的に学習します"/> </a> <div class="wzrthree-right"> <a target="_blank" title="550W ファンマスターが JavaScript をゼロから段階的に学習します" href="//m.sbmmt.com/ja/course/1645.html">550W ファンマスターが JavaScript をゼロから段階的に学習します</a> <div class="wzrthreerb"> <div >706 回の学習</div> <div class="courseICollection" data-id="1645"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="//m.sbmmt.com/ja/course/1644.html" title="Python マスター Mosh、基礎知識ゼロの初心者でも 6 時間で始められる" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/067/6616418ca80b8916.png" alt="Python マスター Mosh、基礎知識ゼロの初心者でも 6 時間で始められる"/> </a> <div class="wzrthree-right"> <a target="_blank" title="Python マスター Mosh、基礎知識ゼロの初心者でも 6 時間で始められる" href="//m.sbmmt.com/ja/course/1644.html">Python マスター Mosh、基礎知識ゼロの初心者でも 6 時間で始められる</a> <div class="wzrthreerb"> <div >25763 回の学習</div> <div class="courseICollection" data-id="1644"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> </ul> </div> <script> var mySwiper = new Swiper('.swiper2', { autoplay: false,//可选选项,自动滑动 slidesPerView : 'auto', }) $('.wzrthreeTab>div').click(function(e){ $('.wzrthreeTab>div').removeClass('check') $(this).addClass('check') $('.wzrthreelist>ul').css('display','none') $('.'+e.currentTarget.dataset.id).show() }) </script> </div> <div class="wzrFour"> <div class="wzrfour-title"> <div>最新のダウンロード</div> <a href="//m.sbmmt.com/ja/xiazai">詳細> </a> </div> <script> $(document).ready(function(){ var sjyx_banSwiper = new Swiper(".sjyx_banSwiperwz",{ speed:1000, autoplay:{ delay:3500, disableOnInteraction: false, }, pagination:{ el:'.sjyx_banSwiperwz .swiper-pagination', clickable :false, }, loop:true }) }) </script> <div class="wzrfourList swiper3"> <div class="wzrfourlTab swiper-wrapper"> <div class="check swiper-slide" data-id="onef">ウェブエフェクト <div></div></div> <div class="swiper-slide" data-id="twof">公式サイト<div></div></div> <div class="swiper-slide" data-id="threef">サイト素材<div></div></div> <div class="swiper-slide" data-id="fourf">フロントエンドテンプレート<div></div></div> </div> <ul class="onef"> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="jQuery エンタープライズ メッセージ フォームの連絡先コード" href="//m.sbmmt.com/ja/toolset/js-special-effects/8071">[フォームボタン] jQuery エンタープライズ メッセージ フォームの連絡先コード</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="HTML5 MP3 オルゴール再生効果" href="//m.sbmmt.com/ja/toolset/js-special-effects/8070">[プレイヤーの特殊効果] HTML5 MP3 オルゴール再生効果</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="HTML5 クールなパーティクル アニメーション ナビゲーション メニューの特殊効果" href="//m.sbmmt.com/ja/toolset/js-special-effects/8069">[メニューナビゲーション] HTML5 クールなパーティクル アニメーション ナビゲーション メニューの特殊効果</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="jQuery ビジュアル フォームのドラッグ アンド ドロップ編集コード" href="//m.sbmmt.com/ja/toolset/js-special-effects/8068">[フォームボタン] jQuery ビジュアル フォームのドラッグ アンド ドロップ編集コード</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="VUE.JS 模倣 Kugou 音楽プレーヤー コード" href="//m.sbmmt.com/ja/toolset/js-special-effects/8067">[プレイヤーの特殊効果] VUE.JS 模倣 Kugou 音楽プレーヤー コード</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="古典的な HTML5 プッシュ ボックス ゲーム" href="//m.sbmmt.com/ja/toolset/js-special-effects/8066">[html5特殊効果] 古典的な HTML5 プッシュ ボックス ゲーム</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="画像効果を追加または削減するための jQuery スクロール" href="//m.sbmmt.com/ja/toolset/js-special-effects/8065">[画像の特殊効果] 画像効果を追加または削減するための jQuery スクロール</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="CSS3 個人アルバム カバー ホバー ズーム効果" href="//m.sbmmt.com/ja/toolset/js-special-effects/8064">[フォトアルバム効果] CSS3 個人アルバム カバー ホバー ズーム効果</a> </div> </li> </ul> <ul class="twof" style="display:none"> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8328" title="室内装飾クリーニングおよび修理サービス会社のウェブサイトのテンプレート" target="_blank">[フロントエンドテンプレート] 室内装飾クリーニングおよび修理サービス会社のウェブサイトのテンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8327" title="フレッシュカラーの個人履歴書ガイドページテンプレート" target="_blank">[フロントエンドテンプレート] フレッシュカラーの個人履歴書ガイドページテンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8326" title="デザイナーのクリエイティブな仕事の履歴書 Web テンプレート" target="_blank">[フロントエンドテンプレート] デザイナーのクリエイティブな仕事の履歴書 Web テンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8325" title="現代のエンジニアリング建設会社のウェブサイトのテンプレート" target="_blank">[フロントエンドテンプレート] 現代のエンジニアリング建設会社のウェブサイトのテンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8324" title="教育サービス機関向けのレスポンシブ HTML5 テンプレート" target="_blank">[フロントエンドテンプレート] 教育サービス機関向けのレスポンシブ HTML5 テンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8323" title="オンライン電子書籍ストア モールのウェブサイト テンプレート" target="_blank">[フロントエンドテンプレート] オンライン電子書籍ストア モールのウェブサイト テンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8322" title="IT テクノロジーがインターネット企業の Web サイト テンプレートを解決します" target="_blank">[フロントエンドテンプレート] IT テクノロジーがインターネット企業の Web サイト テンプレートを解決します</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8321" title="パープルスタイル外国為替取引サービスウェブサイトテンプレート" target="_blank">[フロントエンドテンプレート] パープルスタイル外国為替取引サービスウェブサイトテンプレート</a> </div> </li> </ul> <ul class="threef" style="display:none"> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-materials/3078" target="_blank" title="かわいい夏の要素のベクター素材 (EPS+PNG)">[PNG素材] かわいい夏の要素のベクター素材 (EPS+PNG)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-materials/3077" target="_blank" title="4 つの赤い 2023 卒業バッジ ベクター素材 (AI+EPS+PNG)">[PNG素材] 4 つの赤い 2023 卒業バッジ ベクター素材 (AI+EPS+PNG)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-materials/3076" target="_blank" title="歌う鳥と花がいっぱいのカートデザイン春のバナーベクター素材(AI+EPS)">[バナー画像] 歌う鳥と花がいっぱいのカートデザイン春のバナーベクター素材(AI+EPS)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-materials/3075" target="_blank" title="金色の卒業帽ベクター素材(EPS+PNG)">[PNG素材] 金色の卒業帽ベクター素材(EPS+PNG)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-materials/3074" target="_blank" title="黒と白のスタイルの山アイコン ベクター素材 (EPS+PNG)">[PNG素材] 黒と白のスタイルの山アイコン ベクター素材 (EPS+PNG)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-materials/3073" target="_blank" title="異なる色のマントと異なるポーズを持つスーパーヒーローのシルエットベクター素材(EPS+PNG)">[PNG素材] 異なる色のマントと異なるポーズを持つスーパーヒーローのシルエットベクター素材(EPS+PNG)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-materials/3072" target="_blank" title="フラット スタイルの植樹祭バナー ベクター素材 (AI+EPS)">[バナー画像] フラット スタイルの植樹祭バナー ベクター素材 (AI+EPS)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-materials/3071" target="_blank" title="9つのコミックスタイルの爆発するチャットバブルベクター素材(EPS+PNG)">[PNG素材] 9つのコミックスタイルの爆発するチャットバブルベクター素材(EPS+PNG)</a> </div> </li> </ul> <ul class="fourf" style="display:none"> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8328" target="_blank" title="室内装飾クリーニングおよび修理サービス会社のウェブサイトのテンプレート">[フロントエンドテンプレート] 室内装飾クリーニングおよび修理サービス会社のウェブサイトのテンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8327" target="_blank" title="フレッシュカラーの個人履歴書ガイドページテンプレート">[フロントエンドテンプレート] フレッシュカラーの個人履歴書ガイドページテンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8326" target="_blank" title="デザイナーのクリエイティブな仕事の履歴書 Web テンプレート">[フロントエンドテンプレート] デザイナーのクリエイティブな仕事の履歴書 Web テンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8325" target="_blank" title="現代のエンジニアリング建設会社のウェブサイトのテンプレート">[フロントエンドテンプレート] 現代のエンジニアリング建設会社のウェブサイトのテンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8324" target="_blank" title="教育サービス機関向けのレスポンシブ HTML5 テンプレート">[フロントエンドテンプレート] 教育サービス機関向けのレスポンシブ HTML5 テンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8323" target="_blank" title="オンライン電子書籍ストア モールのウェブサイト テンプレート">[フロントエンドテンプレート] オンライン電子書籍ストア モールのウェブサイト テンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8322" target="_blank" title="IT テクノロジーがインターネット企業の Web サイト テンプレートを解決します">[フロントエンドテンプレート] IT テクノロジーがインターネット企業の Web サイト テンプレートを解決します</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="//m.sbmmt.com/ja/toolset/website-source-code/8321" target="_blank" title="パープルスタイル外国為替取引サービスウェブサイトテンプレート">[フロントエンドテンプレート] パープルスタイル外国為替取引サービスウェブサイトテンプレート</a> </div> </li> </ul> </div> <script> var mySwiper = new Swiper('.swiper3', { autoplay: false,//可选选项,自动滑动 slidesPerView : 'auto', }) $('.wzrfourlTab>div').click(function(e){ $('.wzrfourlTab>div').removeClass('check') $(this).addClass('check') $('.wzrfourList>ul').css('display','none') $('.'+e.currentTarget.dataset.id).show() }) </script> </div> </div> </div> <footer> <div class="footer"> <div class="footertop"> <img src="/static/imghw/logo.png" alt=""> <p>福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!</p> </div> <div class="footermid"> <a href="//m.sbmmt.com/ja/about/us.html">私たちについて</a> <a href="//m.sbmmt.com/ja/about/disclaimer.html">免責事項</a> <a href="//m.sbmmt.com/ja/update/article_0_1.html">Sitemap</a> </div> <div class="footerbottom"> <p> © php.cn All rights reserved </p> </div> </div> </footer> <input type="hidden" id="verifycode" value="/captcha.html"> <script>layui.use(['element', 'carousel'], function () {var element = layui.element;$ = layui.jquery;var carousel = layui.carousel;carousel.render({elem: '#test1', width: '100%', height: '330px', arrow: 'always'});$.getScript('/static/js/jquery.lazyload.min.js', function () {$("img").lazyload({placeholder: "/static/images/load.jpg", effect: "fadeIn", threshold: 200, skip_invisible: false});});});</script> <script src="/static/js/common_new.js"></script> <script type="text/javascript" src="/static/js/jquery.cookie.js?1735098148"></script> <script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script> <link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css?2' type='text/css' media='all'/> <script type='text/javascript' src='/static/js/viewer.min.js?1'></script> <script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script> <script type="text/javascript" src="/static/js/global.min.js?5.5.53"></script> <!-- Matomo --> <script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '9']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script> <!-- End Matomo Code --> </body> </html>