1.接入文档:https://opendocs.alipay.com/apis/api_1/alipay.trade.page.pay?scene=API002020081300013629
2.将php SDK&Demo下载下来,文件放到lib文件夹,
这是我的目录,也可以放到框架下的extend目录下。
sdk下载地址:小程序文档 - 支付宝文档中心
这是我的文件目录
3.正式接入
public function pay(){ $orderId = input('get.order_id'); $payType = input('get.type'); $order = OrderService::getOrderInfo(['id' => $orderId]); $aop = new AopClient(); $aop->appId=$this->aliPayConfig['alipay_appid']; $aop->rsaPrivateKey = $this->aliPayConfig['alipay_rsaprivatekey']; $aop->alipayrsaPublicKey = $this->aliPayConfig['alipay_rsapublickey']; $aop->gatewayUrl='https://openapi.alipay.com/gateway.do'; $aop->format='json'; $aop->apiVersion='1.0'; $aop->postCharset='UTF-8'; $aop->signType='RSA2'; $content = [ 'subject'=>$order['trip_title'], 'body'=>'正常支付', 'out_trade_no'=>$order['order_sn'], 'timeout_express'=>'14m', 'total_amount'=>$order['total_price'], 'payMode'=>'正常支付', ]; if($payType == 1){ //支付宝支付 $request = new AlipayTradeWapPayRequest(); }else{ //支付宝扫码支付 $request = new AlipayTradePrecreateRequest(); } $con = json_encode($content); //回调通知地址 $request->setNotifyUrl('https://www.xxxxxx.com/pay/Alipay/notify'); //支付成功返回 $request->setReturnUrl('https://www.xxxxxx.com/Home/Order/getUserOrderList'); $request->setBizContent($con); if($payType == 3) { $response = $aop->execute($request); $responseNode = str_replace(".","_",$request->getApiMethodName())."_response"; $resultCode = $response->$responseNode->code; $res = $resultCode == 10000 ? true : false; $img = $response->$responseNode->qr_code; return $this->fetch('', [ 'payurl' => $img, 'order'=>$order ]); }else{ $response = $aop->pageExecute($request,'GET'); return $response; } }
public function notify() { $aop = new AopClient(); $aop->alipayrsaPublicKey = $this->aliPayConfig['alipay_rsapublickey']; $res = $aop->rsaCheckV1(input('post.'),NULL,'RSA2'); if($res && input('post.trade_status') == 'TRADE_SUCCESS') { $outTradeTo = input('post.out_trade_no'); file_put_contents('out_trade_no.text',$outTradeTo); $order = Db::name('order')->where(array('order_sn' => $outTradeTo))->find(); $data['pay_status'] = $order['money_type'] == 1 ? 3 : 2; $data['pay_time'] = time(); $data['transaction_id'] = input('post.trade_no'); file_put_contents('trade_no.text',$data['transaction_id']); $up = Db::name('order')->where(array('order_sn' => $outTradeTo))->update($data); if ($up) { Db::name('trip_line')->where(array('id' => $order['line_id']))->setInc('ybm_num', $order['people_num']); } }else{ Log::error(input('post')); } }