最近开发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集成支付宝 服务器端的工作,不喜勿喷。祝大家工作开心!