重要的事情说三遍:PHP支付不能用csr文件上传的方式设置公钥!PHP支付不能用csr文件上传的方式设置公钥!PHP支付不能用csr文件上传的方式设置公钥!
框架:TP5 + mysql
设置顺序:
1.在支付宝开发者中心中申请应用,例:应用为:测试支付,appID:abc123
2.在tp5根目录vendor文件夹下加入Alipay的PHPSDK(官方文档中下载)
3.业务代码
function aliPay($order_id, $total_amount){
$config = [
'appid' => 'abc123',
'notify_url' => '本地可外部访问的url链接',
'rsaPrivateKey' => '申请应用时用的私钥',
'alipayrsaPublicKey' => '支付宝公钥!支付宝公钥!支付宝公钥!'
];
if ($order_id!= '' && $total_amount > 0) {
vendor('Alipay.AopSdk');
$aop = new \AopClient();
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";//写死不用动
$aop->format = "json";//写死不用动
$aop->charset = "utf-8";//写死不用动
$aop->signType = "RSA2";//写死不用动
$aop->appId = $config['appid'];
$aop->rsaPrivateKey = $config['rsaPrivateKey'];
$aop->alipayrsaPublicKey = $config['alipayrsaPublicKey'];
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
$request = new \AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数
$bizcontent = json_encode([
'subject' => '订单的简要概述',
'out_trade_no' => $order_id,//此订单号为商户唯一订单号
'total_amount' => $total_amount,//订单价格,保留两位小数
'product_code' => 'QUICK_MSECURITY_PAY'//写死不用动
],JSON_UNESCAPED_UNICODE);
$request->setNotifyUrl($config['notify_url']);
$request->setBizContent($bizcontent);
//这里和普通的接口调用不同,使用的是sdkExecute
$response = $aop->sdkExecute($request);
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
//此处str_replace为我个人加入的,在传回安卓端的时候有时会带上“amp;”,虽然不影响,去掉以防万一
$response = str_replace('amp;', '', htmlspecialchars($response));//就是orderString 可以直接给客户端请求,无需再做处理。
return $response;
} else {
return false;
}
}
其他业务代码略
//打完收工w(゚Д゚)w