最近開發APP時需要集成支付寶支付,作爲一名小小的服務器端後臺開發者針對此次集成做以下整理,希望能夠給大家帶來幫助,同時作爲工作節點的一個回饋。好了,正式進入服務器端集成的工作流程:
本次集成使用支付寶最新的demo,之前有同事把生成簽名在APP端完成,個人感覺這種做法是極其不負責任的做法,無法保證安全性。
第一步:APP端發送訂單信息到後臺服務器;
第二步:服務器端生成簽名串返回給APP端;具體內容參照一下代碼:
public function creatSign(){
//此部分根據具體情況處理訂單信息
//---------------------簽名處理----------------B----
$biz_content=json_encode(array(
"body"=>"orderpay",
"subject"=>"描述信息",
"out_trade_no"=>$order['transaction'],
"total_amount"=>0.01,
"product_code"=>"QUICK_MSECURITY_PAY",
),true);
$ali = array(
"app_id"=>C('aliPayConf_pub.APPID'),
"method"=>"alipay.trade.app.pay",
"format"=>"json",
"charset"=>"utf-8",
"sign_type"=>"RSA",
"sign" => "",
"timestamp"=>date("Y-m-d H:i:s",time()),
"version"=>"1.0",
"notify_url"=>C('aliPayConf_pub.NOTIFY_URL'),
"biz_content"=>$biz_content,
);
$ali = $this->argSort($ali);
$str = "";
foreach ($ali as $key => $val) {
if($key=='sign'){
continue;
}
else{
if($str==''){
$str = $key.'='.$val;
}else{
$str = $str.'&'.$key.'='.$val;
}
}
}
$str = $str.'&sign='.$sign;//傳給支付寶接口的數據
//---------------------簽名處理----------------B----
//以下部分將簽名串整體傳送到APP端即可
}
/*-------------------------以下爲輔助函數------------------------------*/
//數組排序
private function argSort($para) {
ksort($para); //按鍵名對數組排序
reset($para); //將數組第一個指針回到第一個單元
return $para;
}
//RSA簽名
private function sign($data) {
//讀取私鑰文件
$priKey = file_get_contents(C('aliPayConf_pub.RSAPRIVATEKEYFILEPATH'));//私鑰文件路徑
//轉換爲openssl密鑰,必須是沒有經過pkcs8轉換的私鑰
$res = openssl_get_privatekey($priKey);
//調用openssl內置簽名方法,生成簽名$sign
openssl_sign($data, $sign, $res);
//釋放資源
openssl_free_key($res);
//base64編碼
$sign = base64_encode($sign);
return $sign;
}
注:APP_ID,回調地址等信息爲方便管理個人習慣寫在配置文件中;
完成此部分工作APP端通過服務器端返回的信息就可以調起支付寶了,當然服務器端還有最重要的一步請接着往 下看
第三步:支付結果異步通知
此部分內容就比較簡單了,根據返回處理特定的業務邏輯,在此就不再複述了。
以上即爲APP集成支付寶 服務器端的工作,不喜勿噴。祝大家工作開心!