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下,会多次调用该接口,请做好返回值判断
同时,请根据订单号去数据库查状态,是否充值过,防止重复入库

接入完成。。。。。。。。。。。。。

上一篇下一篇

猜你喜欢

热点阅读