°Ù·Ö°ÙÔ´ÂëÍø-Èý¨Õ¾±äµÃÈç´Ë¼òµ¥£¡ µÇ¼ ×¢²á Ç©µ½Áì½ð±Ò£¡

Ö÷Ò³ | ÈçºÎÉý¼¶VIP | TAG±êÇ©

µ±Ç°Î»ÖÃ: Ö÷Ò³>ÍøÕ¾½Ì³Ì>ÍøÒ³ÖÆ×÷> Ô­Éú PHP ʵÏÖÖ§¸¶±¦ App µÚÈý·½µÇ¼ÁÔÈ¡»áÔ±ÐÅÏ¢
·ÖÏíÎÄÕµ½£º

Ô­Éú PHP ʵÏÖÖ§¸¶±¦ App µÚÈý·½µÇ¼ÁÔÈ¡»áÔ±ÐÅÏ¢

·¢²¼Ê±¼ä£º09/01 À´Ô´£ºÎ´Öª ä¯ÀÀ£º ¹Ø¼ü´Ê£º
±³¾°

App ÏîÄ¿ÒªÇóʵÏÖµÚÈý·½ ΢ÐÅ ºÍ Ö§¸¶±¦ µÇ¼£¬Î¢ÐÅ¿ÉÒÔÖ±½ÓÔÚ App ¶ËÍê³ÉÈÏÖ¤Äõ½»áÔ±ÐÅÏ¢£¬Ö§¸¶±¦ÔòÐèÒªºó¶ËÁÔÈ¡¡£

Á÷³Ì

1¡¢Ð§ÀͶËÏÈÄõ½ App ¶Ë µ÷È¡ Ö§¸¶±¦ SDK ËùÐèÒªµÄ infoStr

2¡¢App ¶Ë ͨ¹ý infoStr »ñµÃ»áÔ± ÊÚȨ code

3¡¢Ð§ÀͶËͨ¹ý ÊÚȨ code Äõ½¿ÒÇó token

4¡¢Ð§ÀͶËͨ¹ý token »ñµÃ»áÔ±ÐÅÏ¢

´úÂë

ÔÚÕâ´ËÇ°£¬Ö§¸¶±¦½Ó¿Ú¶Ô½ÓÁ÷³ÌÄãÓ¦µ±ÓÐËùÀí½â¡£

1¡¢´´Á¢ RSA2 °ì·¨£º»ñµÃ sign£º

/**
 * enRSA2 RSA¼ÓÃÜ
 * 
 * @param String $data
 * @return String
 */
private function enRSA2($data)
{
    $str = chunk_split(trim($this->private_key), 64, "\n");
    $key = "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n";
    // $key = file_get_contents(storage_path('rsa_private_key.pem')); ΪÎļþʱÕâÑùÒýÈë
    $signature = '';
    $signature = openssl_sign($data, $signature, $key, OPENSSL_ALGO_SHA256)?base64_encode($signature):NULL;
    return $signature;
}

2¡¢´´Á¢Ò»¸ö Get ²ÎÊýÆ´½Ó°ì·¨£¬°ü¹ÜÏà·ûÖ§¸¶±¦¼ÓÇ©×Ö·û´®ÒªÇó£º

/**
 * myHttpBuildQuery
 * Ö®ËùÒÔ²»Ïû ×Ô´øº¯Êý `http_build_query` 
 * ÊÇÓÉÓÚ¸ñ¾Ö»¯µÄʱ¼ä´øÓÐ  ¡®:¡¯  »á±»×ª»»³ÉÊ®Áù½øÖÆ utf-8 Âë
 * 
 * @param Array
 * @return String
 */
private function myHttpBuildQuery($dataArr)
{
    ksort($dataArr);
    $signStr = '';
    foreach ($dataArr as $key => $val) {
        if (empty($signStr)) {
            $signStr = $key.'='.$val;
        } else {
            $signStr .= '&'.$key.'='.$val;
        }
    }
    return $signStr;  
}

3¡¢¸øµ½ APP ¶ËÐèÒªµÄ infoStr:

/**
 * InfoStr APPµÇ¼ÐèÒªµÄµÄinfostr
 * 
 * @return String
 */
public function infoStr()
{
    $infoStr = http_build_query([
        'apiname' => 'com.alipay.account.auth',
        'method' => 'alipay.open.auth.sdk.code.get',
        'app_id' => $this->app_id,
        'app_name' => 'mc',
        'biz_type' => 'openservice',
        'pid' => $this->pid,
        'product_id' => 'APP_FAST_LOGIN',
        'scope' => 'kuaijie',
        'target_id' => mt_rand(999, 99999), //ÉÌ»§±êʶ¸Ã´Î»áÔ±ÊÚȨ¿ÒÇóµÄID£¬¸ÃÖµÔÚÉÌ»§¶ËÓ¦±£³Ö¶ÀÒ»
        'auth_type' => 'AUTHACCOUNT', // AUTHACCOUNT´ú±íÊÚȨ£»LOGIN´ú±íµÇ¼
        'sign_type' => 'RSA2',
    ]);
    $infoStr .= '&sign='.$this->enRSA2($infoStr);
    return $infoStr;
}

4¡¢Äõ½»áÔ±ÐÅÏ¢£º

 /**
     * AlipayToken »ñµÃ»áÔ± ¿ÒÇótoken, ͨ¹ýËü»ñµÃ »áÔ±ÐÅÏ¢
     * 
     * ÐèÒªÒÀÕÕÖ§¸¶±¦¼ÓÇ©Á÷³ÌÀ´¡£
     */
    public function userInfo($app_auth_token)
    {
        $infoArr = [
            'method' => 'alipay.system.oauth.token',
            'app_id' => $this->app_id,
            'charset' => 'utf-8',
            'sign_type' => 'RSA2',
            'timestamp' => date('Y-m-d H:i:s'),
            'version' => '1.0',
            'code' => $app_auth_token,
            'grant_type' => 'authorization_code',
        ];
        $signStr = $this->myHttpBuildQuery($infoArr);
        $sign = urlencode($this->enRSA2($signStr));
        $qureStr = $signStr.'&sign='.$sign;
        $res = new Client();
        $body = $res->get('https://openapi.alipay.com/gateway.do?'.$qureStr)->getBody()->getContents();
        $body = json_decode($body);
        if (!isset($body->alipay_system_oauth_token_response->access_token)) {
            return '½Ó¿Ú·Ç³£';
        } else {
            $autho_token = $body->alipay_system_oauth_token_response->access_token;
            $userinfo = $this->aliPayUserInfo($autho_token);
            return $userinfo; // »òÔò ·µ»Ø json_encode($userinfo) °´ÕÕʵ¼ÊÐèÇóÀ´ 
        }
    }
    /**
     * AliPayUserInfo ͨ¹ý token ÁÔÈ¡»áÔ±ÐÅÏ¢
     */
    private function aliPayUserInfo($autho_token)
    {
        $infoArr = [
            'method' => 'alipay.user.info.share',
            'app_id' => $this->app_id,
            'charset' => 'utf-8',
            'sign_type' => 'RSA2',
            'timestamp' => date('Y-m-d H:i:s'),
            'version' => '1.0',
            'auth_token' => $autho_token,
        ];
        $signStr = $this->myHttpBuildQuery($infoArr);
        $sign = urlencode($this->enRSA2($signStr));
        $qureStr = $signStr.'&sign='.$sign;
        $res = new Client();
        $body = $res->get('https://openapi.alipay.com/gateway.do?'.$qureStr)->getBody()->getContents();
        $body = json_decode($body);
        if (!isset($body->alipay_user_info_share_response)) {
            return '½Ó¿Ú·Ç³£';
        }
        $body = $body->alipay_user_info_share_response;
        return $body;
    }

´úÂë×ÜÀÀ

<?php 
// ʹÓà Guzzle ×ö¿ÒÇó²Ù×Ý
use GuzzleHttp\Client;
// Ö§¸¶±¦APP µÚÈý·½µÇ¼
// Ìص㣺±ÈÄâ΢ÐÅ£¬Ö§¸¶±¦ËùÓÐÃôÈñÐÅÏ¢¶¼ÔÚЧÀͶËÍê³É£¬ °ü¹ÜÁËƽ°²
//
// Á÷³Ì£º
// 1.ЧÀͶ˵½APP infoStr 
// 2.APP¶Ë ͨ¹ýinfoStr »ñµÃ auth_code 
// 3.ЧÀͶËͨ¹ý auth_code Äõ½¿ÒÇó token
// 4.ЧÀͶËͨ¹ý token »ñµÃ»áÔ±ÐÅÏ¢
class AliPayUser{
    protected $app_id = 'Ö§¸¶±¦app_id';
    protected $pid = 'Ö§¸¶±¦pid';
    protected $private_key = 'ÄãµÄ˽Կ';
    /**
     * InfoStr APPµÇ¼ÐèÒªµÄµÄinfostr
     * 
     * @return String
     */
    public function infoStr()
    {
        $infoStr = http_build_query([
            'apiname' => 'com.alipay.account.auth',
            'method' => 'alipay.open.auth.sdk.code.get',
            'app_id' => $this->app_id,
            'app_name' => 'mc',
            'biz_type' => 'openservice',
            'pid' => $this->pid,
            'product_id' => 'APP_FAST_LOGIN',
            'scope' => 'kuaijie',
            'target_id' => mt_rand(999, 99999), //ÉÌ»§±êʶ¸Ã´Î»áÔ±ÊÚȨ¿ÒÇóµÄID£¬¸ÃÖµÔÚÉÌ»§¶ËÓ¦±£³Ö¶ÀÒ»
            'auth_type' => 'AUTHACCOUNT', // AUTHACCOUNT´ú±íÊÚȨ£»LOGIN´ú±íµÇ¼
            'sign_type' => 'RSA2',
        ]);
        $infoStr .= '&sign='.$this->enRSA2($infoStr);
        return $infoStr;
    }
     /**
     * AlipayToken »ñµÃ»áÔ± ¿ÒÇótoken, ͨ¹ýËü»ñµÃ »áÔ±ÐÅÏ¢
     * 
     * ÐèÒªÒÀÕÕÖ§¸¶±¦¼ÓÇ©Á÷³ÌÀ´¡£
     */
    public function userInfo($app_auth_token)
    {
        $infoArr = [
            'method' => 'alipay.system.oauth.token',
            'app_id' => $this->app_id,
            'charset' => 'utf-8',
            'sign_type' => 'RSA2',
            'timestamp' => date('Y-m-d H:i:s'),
            'version' => '1.0',
            'code' => $app_auth_token,
            'grant_type' => 'authorization_code',
        ];
        $signStr = $this->myHttpBuildQuery($infoArr);
        $sign = urlencode($this->enRSA2($signStr));
        $qureStr = $signStr.'&sign='.$sign;
        $res = new Client();
        $body = $res->get('https://openapi.alipay.com/gateway.do?'.$qureStr)->getBody()->getContents();
        $body = json_decode($body);
        if (!isset($body->alipay_system_oauth_token_response->access_token)) {
            return '½Ó¿Ú·Ç³£';
        } else {
            $autho_token = $body->alipay_system_oauth_token_response->access_token;
            $userinfo = $this->aliPayUserInfo($autho_token);
            return $userinfo; // »òÔò ·µ»Ø json_encode($userinfo) °´ÕÕʵ¼ÊÐèÇóÀ´ 
        }
    }
    /**
     * AliPayUserInfo ͨ¹ý token ÁÔÈ¡»áÔ±ÐÅÏ¢
     */
    private function aliPayUserInfo($autho_token)
    {
        $infoArr = [
            'method' => 'alipay.user.info.share',
            'app_id' => $this->app_id,
            'charset' => 'utf-8',
            'sign_type' => 'RSA2',
            'timestamp' => date('Y-m-d H:i:s'),
            'version' => '1.0',
            'auth_token' => $autho_token,
        ];
        $signStr = $this->myHttpBuildQuery($infoArr);
        $sign = urlencode($this->enRSA2($signStr));
        $qureStr = $signStr.'&sign='.$sign;
        $res = new Client();
        $body = $res->get('https://openapi.alipay.com/gateway.do?'.$qureStr)->getBody()->getContents();
        $body = json_decode($body);
        if (!isset($body->alipay_user_info_share_response)) {
            return '½Ó¿Ú·Ç³£';
        }
        $body = $body->alipay_user_info_share_response;
        return $body;
    }
    /**
     * enRSA2 RSA¼ÓÃÜ
     * 
     * @param String $data
     * @return String
     */
    private function enRSA2($data)
    {
        $str = chunk_split(trim($this->private_key), 64, "\n");
        $key = "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n";
        // $key = file_get_contents(storage_path('rsa_private_key.pem')); ΪÎļþʱÕâÑùÒýÈë
        $signature = '';
        $signature = openssl_sign($data, $signature, $key, OPENSSL_ALGO_SHA256)?base64_encode($signature):NULL;
        return $signature;
    }
    /**
     * myHttpBuildQuery ·µ»ØÒ»¸ö http Get ´«²ÎÊý×é
     * Ö®ËùÒÔ²»Ïû ×Ô´øº¯Êý http_build_query ʱ¼ä´ø ¡®:¡¯ »á±»×ª»»
     * 
     * @param Array
     * @return String
     */
    private function myHttpBuildQuery($dataArr)
    {
        ksort($dataArr);
        $signStr = '';
        foreach ($dataArr as $key => $val) {
            if (empty($signStr)) {
                $signStr = $key.'='.$val;
            } else {
                $signStr .= '&'.$key.'='.$val;
            }
        }
        return $signStr;  
    }
}

ÆäËü

1.ÁôÒ⣺Õâ·Ý´úÂëÊÇ´ÓÔ­ÓÐÏîÄ¿°Ç³öÀ´£¬Ö÷Èç¹ûΪÓдËÐèÇóµÄ¿ª·¢ÈËÔ±¹©¸ø²ÎÕÕ £¬²¢Î´²âÊÔ¿É·ñÄÜÖ±½ÓʹÓã¬Çë×ÔÐвâÊÔ¡£

2.Ö®ËùÒÔ²»ÏûÖ§¸¶±¦ php_SDK£¬ÊÇÓÉÓÚÐèÇóÓÐÏÞ£ºÖ»ÁÔÈ¡»áÔ±µÄÐÅÏ¢£¬Ã»±ØÒª¡£

3.´úÂëÓв»ºÏÀíµÄµØ·½»¹ÇëÌá³öÀ´£¬´ó¼Ò»¥Ïàѧϰ¡£

ÒÔÉϾÍÊÇÔ­Éú PHP ʵÏÖÖ§¸¶±¦ App µÚÈý·½µÇ¼ÁÔÈ¡»áÔ±ÐÅÏ¢µÄ¾ßÌåÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢°Ù·Ö°ÙÔ´ÂëÍøÆäËüÏà¹ØÎÄÕ£¡

´òÉÍ

´òÉÍ

È¡Ïû

¸ÐлÄúµÄÖ§³Ö£¬ÎÒ»á¼ÌÐøŬÁ¦µÄ!

ɨÂëÖ§³Ö
ɨÂë´òÉÍ£¬Äã˵¶àÉپͶàÉÙ

´ò¿ªÖ§¸¶±¦É¨Ò»É¨£¬¼´¿É½øÐÐɨÂë´òÉÍŶ

°Ù·Ö°ÙÔ´ÂëÍø ½¨Òé´òÉÍ1¡«10Ôª£¬ÍÁºÀËæÒ⣬¸ÐлÄúµÄÔĶÁ£¡

¹²ÓÐ155ÈËÔĶÁ£¬ÆÚ´ýÄãµÄÆÀÂÛ£¡·¢±íÆÀÂÛ
êdzƣº ÍøÖ·£º ÑéÖ¤Â룺 µã»÷ÎÒ¸ü»»Í¼Æ¬
×îÐÂÆÀÂÛ

±¾ÎıêÇ©

¹ã¸æÔÞÖú

ÄܳöÒ»·ÖÁ¦ÊÇÒ»·Ö°É£¡

¶©ÔÄ»ñµÃ¸ü¶àÄ£°å

±¾ÎıêÇ©

¹ã¸æÔÞÖú

¶©ÔÄ»ñµÃ¸ü¶àÄ£°å