php實(shí)現(xiàn)paypal 授權(quán)登錄
更新時(shí)間:2015年05月28日 15:10:27 投稿:hebedich
本文給大家分享的是php實(shí)現(xiàn)的paypal授權(quán)登錄的代碼,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
php實(shí)現(xiàn)paypal 授權(quán)登錄
<?php
/**
* @project paypal login
* @author jiangjianhe
* @date 2015-04-03
*/
class paypallogin
{
//沙箱token鏈接
private $_sanbox_oauth2_auth_uri = 'https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize';
private $_live_oauth2_auth_uri = 'https://www.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize';
private $_acquire_user_profile_sandbox_url = 'https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/userinfo?schema=openid&access_token=';
private $_acquire_user_profile_live_url = 'https://www.paypal.com/webapps/auth/protocol/openidconnect/v1/userinfo?schema=openid&access_token=';
//沙箱token鏈接
private $_token_service_sandbox_url = 'https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/tokenservice';
private $_token_service_live_url = 'https://www.paypal.com/webapps/auth/protocol/openidconnect/v1/tokenservice';
private $_sanbox_flag = true;
private $_client_id = null;
private $_client_secret = null;
private $_redirect_uri = null;
private $_state = '';
private $_scope = 'openid email phone profile address https://uri.paypal.com/services/paypalattributes'; //scope 參數(shù)決定訪問令牌的訪問權(quán)限 各個(gè)參數(shù)詳解url;:https://www.paypal-biz.com/product/login-with-paypal/index.html#configureButton
public $token = null;
public $protocol = "http";
/**
* @name 構(gòu)造函數(shù)
* @param $flag 是否沙箱環(huán)境
*/
public function __construct($redirect_uri, $client_id,$client_secret,$scope,$state,$flag = true)
{
$this->_sanbox_flag = $flag;
$this->_redirect_uri = $redirect_uri;
$this->_client_id = $client_id;
$this->_client_secret = $client_secret;
$this->_scope = $scope;
$this->_state = $state;
}
/**
* 創(chuàng)建paypal request url
* @return string
*/
public function create_request_url()
{
$oauth2_auth_uri = $this->_sanbox_flag ? $this->_sanbox_oauth2_auth_uri :$this->_live_oauth2_auth_uri;
$url = $oauth2_auth_uri.'?'.
http_build_query(
array(
'client_id' => $this->_client_id, //通過應(yīng)用程序注冊(cè)流程獲得的唯一客戶端標(biāo)識(shí)符。必需。
'response_type' =>'code', //表明授權(quán)代碼被發(fā)送回應(yīng)用程序返回URL。為了使訪問令牌在用戶代理中不可見, 建議使用<code>code</code>一值。如果您希望在響應(yīng)中同時(shí)收到授權(quán)代碼和 id_token ,請(qǐng)傳遞 code+id_token。另一個(gè)可能的 response_type 值是 token ——大部分由javascript和移動(dòng)客戶端等公共客戶端使用。
'scope' => $this->_scope,//;implode(',', $this->scope),
'redirect_uri' => urlencode($this->_redirect_uri), //應(yīng)用程序的返回URL。結(jié)構(gòu)、主機(jī)名和端口必須與您在注冊(cè)應(yīng)用程序時(shí)設(shè)置的返回URL相符。
'nonce' => time().rand(), //不透明的隨機(jī)標(biāo)識(shí)符,可減少重放攻擊風(fēng)險(xiǎn)。簡(jiǎn)單的函數(shù)是:(timestamp + Base64 encoding (random\[16\]))。
'state' => $this->_state, // CSRF驗(yàn)證碼
)
);
return $url;
}
/**
* get PayPal access token
* @param string $code ?
* @return string access token
*/
public function acquire_access_token($code ) {
$accessToken = null;
try {
$postvals = sprintf("client_id=%s&client_secret=%s&grant_type=authorization_code&code=%s",$this->_client_id,$this->_client_secret,$code);
if($this->_sanbox_flag)
$ch = curl_init($this->_token_service_sandbox_url);
else
$ch = curl_init($this->_token_service_live_url);
$options = array(
CURLOPT_POST => 1,
CURLOPT_VERBOSE => 1,
CURLOPT_POSTFIELDS => $postvals,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => FALSE,
//CURLOPT_SSLVERSION => 2
);
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close( $ch );
if (!$response ) {
throw new Exception( "Error retrieving access token: " . curl_error($ch));
}
$jsonResponse = json_decode($response );
if ( isset( $jsonResponse->access_token) ) {
$accessToken = $jsonResponse->access_token;
}
} catch( Exception $e) {
throw new Exception($e->getMessage(), 1);
}
return $accessToken;
}
/**
* get the PayPal user profile, decoded
* @param string $accessToken
* @return object
*/
public function acquire_paypal_user_profile($accessToken ) {
try {
if($this->_sanbox_flag)
$url = $this->_acquire_user_profile_sandbox_url . $accessToken;
else
$url = $this->_acquire_user_profile_live_url . $accessToken;
$ch = curl_init( $url );
$options = array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => FALSE,
//CURLOPT_SSLVERSION => 2
);
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
$error = curl_error( $ch);
curl_close( $ch );
if (!$response )
{
return false;
}
return json_decode($response);
} catch( Exception $e ) {
return false;
}
}
}
?>
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
相關(guān)文章
PHP使用FFmpeg獲取視頻播放總時(shí)長(zhǎng)與碼率等信息
這篇文章給大家分享了利用PHP中的FFmpeg讀取視頻播放時(shí)長(zhǎng)與碼率等信息,有需要的朋友們可以參考借鑒。下面來一起看看吧。2016-09-09
PHP網(wǎng)頁游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十六)
這篇文章主要介紹了PHP網(wǎng)頁游戲Xnova(ogame)源碼解讀的攻擊任務(wù)頁面的代碼流程,需要的朋友可以參考下2014-06-06
Yii1.0 不同頁面多個(gè)驗(yàn)證碼的使用實(shí)現(xiàn)
這篇文章主要介紹了Yii1.0 不同頁面多個(gè)驗(yàn)證碼的使用實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
PHP實(shí)現(xiàn)留言板功能的詳細(xì)代碼
這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)留言板功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
WordPress中設(shè)置Post Type自定義文章類型的實(shí)例教程
這篇文章主要介紹了WordPress中設(shè)置Post Type自定義文章類型的實(shí)例教程,后臺(tái)文章類型的設(shè)置是WordPress的一大特色,然而自帶的文章類型往往并不夠用,需要的朋友可以參考下2016-05-05

