เวอร์ชัน 2.0 เปิดตัวใหม่ แพลตฟอร์มการเข้าสู่ระบบที่รองรับในปัจจุบัน ได้แก่ :
composer require anerg2046/sns_auth
เนมสเปซที่ใช้โดยไลบรารีคลาสคือ
\anerg\OAuth2
.
├── README.md 说明文件
├── composer.json composer文件
├── src 代码源文件目录
│ ├── Connector
│ │ ├── Gateway.php 必须继承的抽象类
│ │ └── GatewayInterface.php 必须实现的接口
│ ├── Gateways
│ │ ├── Alipay.php
│ │ ├── Facebook.php
│ │ ├── Google.php
│ │ ├── Line.php
│ │ ├── Qq.php
│ │ ├── Twitter.php
│ │ ├── Weibo.php
│ │ └── Weixin.php
│ ├── Helper
│ │ └── Str.php 字符串辅助类
│ └── OAuth.php 抽象实例类
└── wx_proxy.php 微信多域名代理文件
ในไฟล์อินเทอร์เฟซ มีการกำหนดวิธีการไว้ 4 วิธี ซึ่งทุกคลาสฐานของบุคคลที่สามจะต้องนำไปใช้สำหรับการดำเนินการเข้าสู่ระบบของบุคคลที่สามที่เกี่ยวข้องและการได้มาซึ่งข้อมูล ชื่อวิธีการมีดังนี้:
/**
* 得到跳转地址
*/
public function getRedirectUrl ();
/**
* 获取当前授权用户的openid标识
*/
public function openid ();
/**
* 获取格式化后的用户信息
*/
public function userinfo ();
/**
* 获取原始接口返回的用户信息
*/
public function userinfoRaw ();
WeChat มีวิธีเพิ่มเติมในการรับที่อยู่ที่ร้องขอโดยพร็อกซี
/**
* 获取中转代理地址
*/
public function getProxyURL ();
ใช้ ThinkPHP5 เป็นตัวอย่าง
<?php
namespace app mobile controller ;
use anerg OAuth2 OAuth ;
use think facade Config ;
class Sns
{
private $ config ;
/**
* 第三方登录,执行跳转操作
*
* @param string $name 第三方渠道名称,目前可用的为:weixin,qq,weibo,alipay,facebook,twitter,line,google
*/
public function login ( $ name )
{
//获取配置
$ this -> config = Config:: get ( ' sns. ' . $ name );
//设置回跳地址
$ this -> config [ ' callback ' ] = $ this -> makeCallback ( $ name );
//可以设置代理服务器,一般用于调试国外平台
$ this -> config [ ' proxy ' ] = ' http://127.0.0.1:1080 ' ;
/**
* 对于微博,如果登录界面要适用于手机,则需要设定->setDisplay('mobile')
*
* 对于微信,如果是公众号登录,则需要设定->setDisplay('mobile'),否则是WEB网站扫码登录
*
* 其他登录渠道的这个设置没有任何影响,为了统一,可以都写上
*/
return redirect (OAuth:: $ name ( $ this -> config )-> setDisplay ( ' mobile ' )-> getRedirectUrl ());
/**
* 如果需要微信代理登录,则需要:
*
* 1.将wx_proxy.php放置在微信公众号设定的回调域名某个地址,如 http://www.abc.com/proxy/wx_proxy.php
* 2.config中加入配置参数proxy_url,地址为 http://www.abc.com/proxy/wx_proxy.php
*
* 然后获取跳转地址方法是getProxyURL,如下所示
*/
$ this -> config [ ' proxy_url ' ] = ' http://www.abc.com/proxy/wx_proxy.php ' ;
return redirect (OAuth:: $ name ( $ this -> config )-> setDisplay ( ' mobile ' )-> getProxyURL ());
}
public function callback ( $ name )
{
//获取配置
$ this -> config = Config:: get ( ' sns. ' . $ name );
//设置回跳地址
$ this -> config [ ' callback ' ] = $ this -> makeCallback ( $ name );
//获取格式化后的第三方用户信息
$ snsInfo = OAuth:: $ name ( $ this -> config )-> userinfo ();
//获取第三方返回的原始用户信息
$ snsInfoRaw = OAuth:: $ name ( $ this -> config )-> userinfoRaw ();
//获取第三方openid
$ openid = OAuth:: $ name ( $ this -> config )-> openid ();
}
/**
* 生成回跳地址
*
* @return string
*/
private function makeCallback ( $ name )
{
//注意需要生成完整的带http的地址
return url ( ' /sns/callback/ ' . $ name , '' , ' html ' , true );
}
}
เวอร์ชัน 2.0 จะไม่ตั้งค่าสถานะผ่านระบบโดยอัตโนมัติอีกต่อไป หากจำเป็น โปรดจัดการการตรวจสอบด้วยตนเอง
ไลน์และเฟสบุ๊คถูกบังคับให้ผ่านสถานะ หากไม่ตั้งค่า ระบบจะส่งค่าสุ่ม
หากคุณต้องการตรวจสอบสถานะ ให้เพิ่มเมธอด ->mustCheckState()
เมื่อรับข้อมูลผู้ใช้
$ snsInfo = OAuth:: $ name ( $ this -> config )-> mustCheckState ()-> userinfo ();
โปรดทราบว่าไม่ใช่ทุกแพลตฟอร์มที่รองรับสถานะการผ่าน โปรดอ่านเอกสารอย่างเป็นทางการด้วยตัวคุณเอง
public function sns ()
{
$ platform = $ this -> request -> param ( ' sns_platform ' );
//获取本站的第三方登录配置
$ config = Config:: get ( $ platform . ' . ' . Config:: get ( $ platform ));
// $config['proxy'] = 'http://127.0.0.1:1080';
//QQ,Facebook,Line,要求客户端传递access_token即可
$ config [ ' access_token ' ] = $ this -> request -> param ( ' access_token ' , '' );
//Twitter需要传递下面四个参数
$ config [ ' oauth_token ' ] = $ this -> request -> param ( ' oauth_token ' , '' );
$ config [ ' oauth_token_secret ' ] = $ this -> request -> param ( ' oauth_token_secret ' , '' );
$ config [ ' user_id ' ] = $ this -> request -> param ( ' user_id ' , '' );
$ config [ ' screen_name ' ] = $ this -> request -> param ( ' screen_name ' , '' );
//其他和web登录一样,要求客户端传递code过来即可,可以是post也可以是get方式
$ snsInfo = OAuth:: $ platform ( $ config )-> userinfo ();
print_r ( $ snsInfo );
}
'app_id' => 'wxbc4113c******',
'app_secret' => '4749970d284217d0a**********',
'scope' => 'snsapi_userinfo',//如果需要静默授权,这里改成snsapi_base,扫码登录系统会自动改为snsapi_login
'app_id' => '1013****',
'app_secret' => '67c52bc284b32e7**********',
'scope' => 'get_user_info',
QQ สามารถรับ unionid
ได้แล้ว สำหรับรายละเอียด โปรดดู: http://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D เฉพาะพารามิเตอร์การกำหนดค่า $config['withUnionid'] = true
คือ จำเป็น ค่าเริ่มต้นคือ จะไม่ขอ Unionid
'app_id' => '78734****',
'app_secret' => 'd8a00617469018d61c**********',
'scope' => 'all',
'app_id' => '2016052*******',
'scope' => 'auth_user',
'pem_private' => Env::get('ROOT_PATH') . 'pem/private.pem', // 你的私钥
'pem_public' => Env::get('ROOT_PATH') . 'pem/public.pem', // 支付宝公钥
'app_id' => '2774925********',
'app_secret' => '99bfc8ad35544d7***********',
'scope' => 'public_profile,user_gender',//user_gender需要审核,所以不一定能获取到
Facebook มีการกำหนดค่าพิเศษ $config['field']
ค่าเริ่มต้นคือ 'id,name,gender,picture.width(400)'
คุณสามารถดูเอกสารประกอบอย่างเป็นทางการเพื่อเลือกข้อมูลผู้ใช้ที่คุณต้องการรับตามที่คุณต้องการ ความต้องการ
'app_id' => '3nHCxZgcK1WpYV**********',
'app_secret' => '2byVAPayMrG8LISjopwIMcJGy***************',
'app_id' => '159******',
'app_secret' => '1f19c98a61d148f2************',
'scope' => 'profile',
'app_id' => '7682717*******************.apps.googleusercontent.com',
'app_secret' => 'w0Kq-aYA***************',
'scope' => 'https://www.googleapis.com/auth/userinfo.profile',
Array
(
[openid] => 1047776979*******
[channel] => google
[nick] => Coeus Rowe
[gender] => m //twitter和line不会返回性别,所以这里是n,Facebook根据你的权限,可能也不会返回,所以也可能是n
[avatar] => https://lh6.googleusercontent.com/-iLps1iAjL8Q/AAAAAAAAAAI/AAAAAAAAAAA/Bu5l0EIquF0/photo.jpg
)
WeChat จะส่งคืนฟิลด์ unionid ที่ไม่ซ้ำใคร
หากคุณมีปัญหาใด ๆ ในระหว่างการใช้งาน กรุณาส่งปัญหา และเราจะตรวจสอบให้ทันเวลา