1 $ali = array( 2 'service' => 'mobile.securitypay.pay', 3 'partner' => 'xxxxxxxxxx',// 4 '_input_charset' => 'utf-8', 5 'sign_type' => 'RSA', 6 'sign' => '', 7 'notify_url' => urlencode($url),//回調地址 8 'out_trade_no' => $ordernu,//商戶網站唯一訂單號 9 'subject' => $cpPayName,//商品名稱 10 'payment_type' => 1,//支付類型 11 'seller_id' => '',//支付寶賬號 12 'total_fee' => $cpPrice,//總金額 13 'body' => $cpPayName,//商品詳情 14 ); 15 $ali = argSort($ali); 16 $str = ''; 17 18 foreach($ali as $key=>$val){ 19 if($key == 'sign_type' || $key == 'sign'){ 20 continue; 21 }else{ 22 if($str == ''){ 23 $str = $key.'='.'"'.$val.'"'; 24 }else{ 25 $str = $str.'&'.$key.'='.'"'.$val.'"'; 26 } 27 } 28 } 29 30 31 $sign = urlencode(sign($str)); 32 $str = $str.'&sign='.'"'.$sign.'"'.'&sign_type='.'"'.$ali['sign_type'].'"';//傳給支付寶接口的數據 33 34 35 function argSort($para) { 36 ksort($para); 37 reset($para); 38 return $para; 39 } 40 41 //RSA簽名 42 function sign($data) { 43 44 //讀取私鑰文件 45 46 $priKey = file_get_contents('key/rsa_private_key.pem');//私鑰文件路徑 47 //轉換為openssl密鑰,必須是沒有經過pkcs8轉換的私鑰 48 49 $res = openssl_get_privatekey($priKey); 50 51 //調用openssl內置簽名方法,生成簽名$sign 52 53 openssl_sign($data, $sign, $res); 54 55 56 //釋放資源 57 58 openssl_free_key($res); 59 60 61 //base64編碼 62 63 $sign = base64_encode($sign); 64 65 return $sign; 66 67 }
