天天看點

微信實作不關注也能微信支付

需要再次補充,若多個公衆号,實作同一個商戶支付情況下,此方法即可實作 

第一步:思維導圖

微信實作不關注也能微信支付

對上圖的(1)進行說明:

到官網下站sdk代碼。本例是php代碼

官網代碼:

public function wxget() {
        //非微信環境下不允許使用此方法
        if(!is_wechat_browser()) {
            return false;
        }
        //當在微信環境中
        if(!isset($_GET['getid']) && !$_SESSION['openid']) { if(isset($_SESSION['user_id'])) {
                $openid = users::load()->get_openid($_SESSION['user_id']);
                $redirect_url = urlencode('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] .
                        '?'. $_SERVER['QUERY_STRING']);//記住目前所浏覽的頁面,傳回時用到
                if(empty($openid)) {
                    $target_url = 'http://mpweixin.xx.com/wxget.php?url=' . $redirect_url;
                    ecs_header('Location:' . $target_url);
                }
            }
        }
        //接受到的資料。
        elseif(isset($_GET['getid']) && isset ($_GET['nonce']) && isset ($_GET['sign'])) {
            $key = '密鑰';$data = array(
                'getid' => trim($_GET['getid']),
                'nonce' => trim($_GET['nonce']),
                'sign' => trim($_GET['sign']),                
            );
            $bool = encryController::load()->checkSignByUrl($data, $key);//驗證單向散列簽名
            if($bool) {
                $_SESSION['openid'] = $data['getid'];
            } else {
                unset($_SESSION['openid']);
            }
        }        
    }      

授權回調頁面域名下的網站代碼

$openid = openidController::load()->getOpenid();//擷取sdk裡的openid
if(isset($_GET['url'])) {//判斷是否帶url
    $url = trim($_GET['url']);
    if(strpos($url, '?') !== 0) {
        $url .= '&getid=' . $openid;
    } else {
        $url .= '?getid=' . $openid;
    }
} else {
    $url = 'http://您的官網位址/index.php?getid=' . $openid;    
}
//進行簽名
$url = openidController::load()->addSignUrl($url);//進行單向雜湊演算法,生成一個簽名
//傳回的格式url為:http://您的官網/wx.php?getid=oZi2Qw1buSdPX6nY2YxudKBGG66E&nonce=h4280t9laf13k051fm271u029xd5ruux&sign=cbb6aec43085031ec3c4ad167b1c20c6
header('Location:'. $url);//帶着openid跳回官網