您好,登錄后才能下訂單哦!
PHP即“超文本預處理器”,是一種通用開源腳本語言。PHP是在服務器端執行的腳本語言,與C語言類似,是常用的網站編程語言。PHP獨特的語法混合了C、Java、Perl以及 PHP 自創的語法。利于學習,使用廣泛,主要適用于Web開發領域。
如何使用PHP實現支付寶支付?支付寶付款,開發上比起微信支付要簡單很多,今天就以支付寶手機網站支付為例,簡單講一下實現方法:
前期準備,當然就不多說了,當你想開發使用支付寶支付,必然需要在支付寶開放品臺注冊認證并且創建好應用并且具備手機網站支付功能!不明白可以查看支付寶官方文檔(https://docs.open.alipay.com/203/107084/)
一.開發準備
開發之前,需要準備以下信息
1.支付寶應用appid
2.明確接口加密方式(RSA或者RSA2)
3.支付寶公鑰
4.應用私鑰
二.支付實現
話不多說,直接上代碼
/** * 將要參與簽名的參數按要求拼接 * @param $data * author 江南極客 * @return string */ function signQueryString($data){ // 去空 $data = array_filter($data); //簽名步驟一:按字典序排序參數 ksort($data); $string_a = http_build_query($data); $string_a = urldecode($string_a); return $string_a; } /** * 支付寶RSA簽名加密 * @param $data 要參與加密的參數 * @param $private_key 應用私鑰 * author 江南極客 * @return array|string */ function RSASign($data,$private_key){ //要簽名的參數字符串 $query_string = signQueryString($data); //應用私鑰 $private_key = chunk_split($private_key, 64, "\n"); $private_key = "-----BEGIN RSA PRIVATE KEY-----\n$private_key-----END RSA PRIVATE KEY-----\n"; $private_key_id = openssl_pkey_get_private($private_key); if ($private_key_id === false){ return array(-1,'提供的私鑰格式不對'); } $rsa_sign = false; if($data['sign_type'] == 'RSA'){ $rsa_sign = openssl_sign($query_string, $sign, $private_key_id,OPENSSL_ALGO_SHA1); }else if($data['sign_type'] == 'RSA2'){ $rsa_sign = openssl_sign($query_string, $sign, $private_key_id,OPENSSL_ALGO_SHA256); } //釋放資源 openssl_free_key($private_key_id); if ($rsa_sign === false){ return array(-1,'簽名失敗'); } $signature = base64_encode($sign); return $signature; } /** * 支付寶支付 * @param array $params 構造好的支付參數 * author 江南極客 * @return array|string */ function aliPay(array $params){ $public = [ 'app_id' => $params['app_id'], 'method' => $params['method'], 'sign_type' => $params['sign_type'], 'format' => 'JSON', 'charset' => 'utf-8', 'version' => '1.0', 'timestamp' => date('Y-m-d H:i:s'), 'biz_content' => $params['biz_content'], ]; if(!empty($params['notify_url'])){ $public['notify_url'] = $params['notify_url']; } if(!empty($params['return_url'])){ $public['return_url'] = $params['return_url']; } $sign = RSASign($public,$params['private_key']); if(is_array($sign)){ return $sign; } $public['sign'] = $sign; $url = 'https://mapi.alipay.com/gateway.do?'. http_build_query($public,'', '&'); return $url; }
注:這里的支付網關,如果是新接口是(https://openapi.alipay.com/gateway.do)
調用實例:
$biz_content = [ 'body' => '測試商品x1', 'subject' => '測試商品', 'out_trade_no' => date('YmdHis').rand(1000,9999), 'product_code' => 'QUICK_WAP_WAY', 'total_amount' => 0.01, ]; $notify_url = "https://xxxxxxxx/notify.php";//通知回調地址(必須是可以無障礙訪問沒有登錄驗證的地址) $params = [ 'app_id' => '2017xxxxxxxxx6554',//appid 'method' => 'alipay.trade.wap.pay',//接口名稱 'sign_type' => 'RSA2',//簽名加密方式 'notify_url' => $notify_url, 'biz_content' => json_encode($biz_content),//請求參數 ]; $params['private_key'] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";//應用私鑰 $data = aliPay($params); print_r($data);
三.回調驗簽
對于手機網站支付產生的交易,支付寶會根據原始支付API中傳入的異步通知地址notify_url,通過POST請求的形式將支付結果作為參數通知到商戶系統。支付寶異步回調通知POST過來的數據如下
在拿到這個數據之后,為了安全防止數據被篡改,需要簽證簽名,方法如下:
/** * 支付寶驗證簽名 * @param $return_data 支付寶服務器推送給notify_url的數據 * @param $public_key 支付寶公鑰 * author 江南極客 * @return bool|int */ function RSAVerify($return_data, $public_key){ if(empty($return_data) || !is_array($return_data)){ return false; } //支付寶公鑰 $public_key = wordwrap($public_key, 64, "\n", true); $public_key = "-----BEGIN PUBLIC KEY-----\n$public_key\n-----END PUBLIC KEY-----\n"; $public_key_id = openssl_pkey_get_public($public_key); if($public_key_id === false){ return false; } //除去sign、sign_type兩個參數外,凡是通知返回回來的參數皆是待驗簽的參數。 $sign = $return_data['sign']; $sign_type = trim($return_data['sign_type'],'"'); unset($return_data['sign'], $return_data['sign_type']); $query_string = signQueryString($return_data); $sign = base64_decode($sign); $rsa_verify = 0; if($sign_type == 'RSA'){ $rsa_verify = openssl_verify($query_string, $sign, $public_key_id,OPENSSL_ALGO_SHA1); }else if($sign_type == 'RSA2'){ $rsa_verify = openssl_verify($query_string, $sign, $public_key_id,OPENSSL_ALGO_SHA256); } openssl_free_key($public_key_id); if($rsa_verify == 0 || $rsa_verify == -1){ //Returns 1 if the signature is correct, 0 if it is incorrect, and -1 on error. return false; } return $rsa_verify; }
其余支付寶其他支付方式(掃碼支付,PC支付,APP支付等),實現方式大同小異,修改幾個參數就OK了!
以上就是如何使用PHP實現支付寶支付的詳細內容,更多請關注億速云其它相關文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。