tp5 接入支付宝 APP支付
2020-07-13 本文已影响0人
归隐小赵
首先去官网下载SDK,申请app_id等,就不说了,必备的东西
直接说源码操作
首先预下单:(生成参数)
···
public function ali_trade_pay($order)
{
import('.Alipay.aop.AopClient', '', '.php');
import('.Alipay.aop.request.AlipayTradeAppPayRequest', '', '.php');
$aop = new \AopClient();
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = "商户号";
$aop->rsaPrivateKey = '*****************************';//商户私钥,去头去尾去回车,一行字符串
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA2";
$aop->alipayrsaPublicKey = '*******************************';//支付宝公钥,去头去尾去回车,一行字符串
$request = new \AlipayTradeAppPayRequest();
$bizcontent = "{\"body\":\"".$order['order_sn']."\","
. "\"subject\": \"".$order['order_sn']."\","
. "\"out_trade_no\": \"". $order['out_trade_no']."\","//商户订单号
. "\"timeout_express\": \"30m\","
. "\"total_amount\": \"".$order['order_amount']."\","//支付金额
. "\"product_code\":\"QUICK_MSECURITY_PAY\""
. "}";
$request->setNotifyUrl(APP_URL.'cen/Callback/aliNotify/');//回调地址
$request->setBizContent($bizcontent);
$response = $aop->sdkExecute($request);
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
//$response = htmlspecialchars($response);//就是orderString 可以直接给客户端请求,无需再做处理。 接口类请注释,如果是直接输出页面到Js,可以不注释
return $response;
}
···
APP端通过接口唤起支付即可
注意:APP支付 只支持RSA2加密!!!!
app_id和权限要给
他的转码JSON,有时候会异常,所以可以改用、
$arr=[]; //参数条件
$bizcontent=json_encode($arr);
$request->setBizContent($bizcontent);
然后注意回调:
//支付宝回调
public function aliNotify()
{
import('.Alipay.aop.AopClient', '', '.php');
import('.Alipay.aop.request.AlipayTradeAppPayRequest', '', '.php');
$aop = new \AopClient();
$aop->alipayrsaPublicKey = 'x'x'x'x'x'x'x';//支付宝公钥
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
//验证通过
if($flag == true && ‘验证条件’)
{
//根据返回的信息进行订单处理
$flow = new model\Flow();
$flow->order_paid($_POST['out_trade_no'],$_POST['trade_no']);
echo "success"; //支付宝
}
else
{
echo "fail";
}
}
获取订单号和状态,验签,然后判断状态
$_POST['trade_status'] == 'TRADE_SUCCESS'
该结果为成功,通过订单号去查询状态并进行数据库业务逻辑
注意,支付宝在返回非success下,会多次调用该接口,请做好返回值判断
同时,请根据订单号去数据库查状态,是否充值过,防止重复入库
接入完成。。。。。。。。。。。。。