以下代碼爲後臺處理部分,真實可用:哈哈哈哈哈,沒騙人,具體支付寶app支付的申請,簽約我就不說了,具體的去看官方文檔
--》https://docs.open.alipay.com/204
public function create_signOp(){
$pay_sn = $_POST['pay_sn'];
if (!preg_match('/^\d{18}$/',$pay_sn)){
output_error('該訂單不存在');
}
$mygoods=array();
//合作身份者id,以2088開頭的16位純數字
$mygoods['partner']="2088xxxxxxxxxx";
//商家賬號
$mygoods['seller_id']="[email protected]";
$mygoods['service']="mobile.securitypay.pay";
$mygoods['payment_type']="1";
$mygoods['_input_charset']="utf-8";
$mygoods['it_b_pay']="30m";
//訂單號
$mygoods['out_trade_no']=$pay['pay_sn'];
//主題
$mygoods['subject']=$pay['pay_sn'];
//商品描述信息
$mygoods['body']=$pay['pay_sn'];
//商品價格
$mygoods['total_fee']=$_order_info['order_amount'];
//服務器端異步響應地址
$mygoods['notify_url']= "";
//排序
// print_r($mygoods);
// exit();
$mygoods = $this->argSort($mygoods);
//拼接
$mystr = $this->createLinkstring($mygoods);
//簽名
$sign = $this->rsaSign($mystr);
//對簽名進行urlencode轉碼
// $sign ='TGsHKw4XLpQUq34YVIp4pxFnZkjCJMt09FJpBm56grRpRDgcwZRh94txZQAB94HxOd89XwTZqdncczrCcgXlPETcpuWDa70GBCAEkn8RtTs2t6UopDWcfU7ZT3/Evhsapgf58+zAS7x9lynYpw1JdoshKIgU5pnfS5vWC1VsbvU=';
$sign = urlencode($sign);
// $res = $this->verify($mystr,$sign);
// var_dump($res);
// exit();
//生成最終簽名信息
$mystr = $this->createstr($mygoods);
// exit(json_encode(array('sign'=>$sign,'shopping'=>$mygoods)));
// $orderInfor = $mystr."&sign=".'"'.$sign.'"'."&sign_type=".'"'.RSA.'"';
$data=array();
$data['status'] = 1;
$data['sign'] = $sign;
$data['pay_info'] = $mygoods;
exit(json_encode($data));
}
function rsaSign($data, $private_key_path) {
$private_key_path='/www/wwwroot/mall2/appinterface/control/rsa_private_key.pem';
$priKey = file_get_contents($private_key_path);
$res = openssl_pkey_get_private($priKey);
openssl_sign($data, $sign, $res);
openssl_free_key($res);
//base64編碼
$sign = base64_encode($sign);
// echo $sign;
return $sign;
}
function createLinkstring($para) {
$arg = "";
while (list ($key, $val) = each ($para)) {
$arg.=$key."=".$val."&";
}
//去掉最後一個&字符
$arg = substr($arg,0,count($arg)-2);
//如果存在轉義字符,那麼去掉轉義
if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
return $arg;
}
function createstr($para) {
$arg = "";
while (list ($key, $val) = each ($para)) {
$arg.=$key."=".$val."&";
}
//去掉最後一個&字符
$arg = substr($arg,0,count($arg)-2);
//如果存在轉義字符,那麼去掉轉義
if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
return $arg;
}
function argSort($para) {
ksort($para);
reset($para);
return $para;
}
function verify($data, $sign) {
//讀取支付寶公鑰文件
$pubKey = "/www/wwwroot/mall2/appinterface/control/rsa_public_key.pem";
//轉換爲openssl格式密鑰
$priKeys = file_get_contents($pubKey);
$res = openssl_get_publickey($priKeys);
//調用openssl內置方法驗籤,返回bool值
$result = (bool)openssl_verify($data, base64_decode($sign), $res);
//釋放資源
openssl_free_key($res);
//返回資源是否成功
var_dump($result);
}