| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- <?php
- define('AOP_SDK_DIR', __DIR__);
- require_once __DIR__ . '/AopSdk.php';
- require_once __DIR__ . '/AlipayConfig.php';
- require_once __DIR__ . '/aop/AopClient.php';
- require_once __DIR__ . '/aop/SignData.php';
- require_once __DIR__ . '/aop/request/AlipayTradeQueryRequest.php';
- class PayNotifyCallback{
- /**
- * 状态查询
- * @param string $orderSn
- * @return bool
- * @throws Exception
- */
- public function queryOrder($orderSn = '')
- {
- if (empty($orderSn)) {
- throw new Exception('订单号不能为空');
- }
- $aop = new AopClient ();
- $aop->signType = "RSA2";
- $aop->gatewayUrl = AlipayConfig::GATEWAY;
- $aop->appId = AlipayConfig::APPID;
- $aop->rsaPrivateKey = AlipayConfig::APPPRIVATEKEY;
- // 注意:这里是支付宝公钥,不是应用公钥
- $aop->alipayrsaPublicKey = AlipayConfig::ALIPAYPUBLICKEY;
- $tradeNo = '';
- $request = new AlipayTradeQueryRequest ();
- $request->setBizContent("{" .
- "\"out_trade_no\":\"$orderSn\"," .
- "\"trade_no\":\"$tradeNo\"" .
- "}");
- $result = $aop->execute($request);
- $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
- $resultCode = $result->$responseNode->code;
- $ttbPay = model('TtbAutoList');
- $orderInfo = $ttbPay->fetchOrderInfo($orderSn);
- if(! empty($resultCode) && $resultCode == 10000) {
- if (empty($orderInfo)) {
- return false;
- }
- $tradeStatus = $result->$responseNode->trade_status;
- if ($tradeStatus == 'TRADE_SUCCESS') {
- // 已支付
- if ($orderInfo['pay_status'] == 1) {
- return true;
- }
- return $ttbPay->paySuccess($orderSn, $result->$responseNode->trade_no);
- /*if ($result->$responseNode->total_amount == $orderInfo['pay_amount']) {
- // 更新订单状态,用户账户余额,账户变化日志
- return $ttbPay->paySuccess($orderSn, $result->$responseNode->trade_no);
- }*/
- } elseif ($tradeStatus == 'TRADE_CLOSED') {
- // 交易关闭
- if ($orderInfo['pay_status'] != 3) {
- $ttbPay->updateOrder(
- ['pay_status' => 3, 'update_time' => NOW_TIMESTAMP],
- ['order_sn' => $orderSn]
- );
- }
- return 'TRADE_CLOSED';
- }
- }
- if (! empty($resultCode) && $resultCode == 40004) {
- // 支付宝返回交易不存在, 麻花网络数据库订单状态更改为已关闭
- if ($orderInfo['pay_status'] != 3) {
- $ttbPay->updateOrder(
- ['pay_status' => 3, 'update_time' => NOW_TIMESTAMP],
- ['order_sn' => $orderSn]
- );
- }
- return 'TRADE_CLOSED';
- }
- return false;
- }
- // 支付回调验证
- public function callback()
- {
- $aop = new AopClient ();
- $aop->alipayrsaPublicKey = C('ALIPAY.ALI_PUBLIC_KEY');
- // 这里也需要支付宝公钥,不是应用公钥
- $result = $aop->rsaCheckV1($_POST, null, $_POST['sign_type']);
- if ($result) {
- if ($this->queryOrder($_POST['out_trade_no'])) {
- echo 'success';
- exit;
- }
- }
- echo 'error'; exit;
- }
- }
|