新版支付宝支付 回调 提现功能展示

作者:yiqiu,最后更新时间:2020-03-24 10:33,访问:278

原文:http://www.upwqy.com/details/242.html



<?php
/**
* Created by PhpStorm.
* User: [一秋]
* Date: 2018/6/14
* Time: 14:34
* Site: http://www.upwqy.com
*/

namespace api\yiqiu\service;
use api\yiqiu\model\OrderModel;

use api\yiqiu\model\RechargeModel;
use api\yiqiu\model\UserModel;
use think\Db;
use think\Exception;
use think\Loader;

Loader::import('alipay.aop.AopCertClient',EXTEND_PATH,'.php');
Loader::import('alipay.aop.request.AlipayTradeAppPayRequest',EXTEND_PATH,'.php');
Loader::import('alipay.aop.request.AlipayFundTransToaccountTransferRequest',EXTEND_PATH,'.php');
Loader::import('alipay.aop.request.AlipayTradeRefundRequest',EXTEND_PATH,'.php');

class AliPayService
{

   /**
    * 获取支付宝 支付参数
    * @param string $subject 主题说明
    * @param string $out_trade_no 订单编号
    * @param float $total_amount 支付金额
    * @param int  $order_type
    * @return string
    */
   public static function getParam($subject,$out_trade_no,$total_amount,$order_type){


       $passback_params = $order_type;


       $appCertPath = config('alipay.appCertPath');
       $alipayCertPath = config('alipay.alipayCertPath');
       $rootCertPath = config('alipay.rootCertPath');



       $aop = new \AopCertClient();
       $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
       $aop->appId = config('alipay.appId');
       $aop->format = 'json';
       $aop->charset = 'UTF-8';
       $aop->signType = 'RSA2';
       $aop->rsaPrivateKey = config('alipay.rsaPrivateKey');
       $aop->alipayrsaPublicKey = $aop->getPublicKey($alipayCertPath);//调用getPublicKey从支付宝公钥证书中提取公钥
       $aop->isCheckAlipayPublicCert = true;//是否校验自动下载的支付宝公钥证书,如果开启校验要保证支付宝根证书在有效期内
       $aop->appCertSN = $aop->getCertSN($appCertPath);//调用getCertSN获取证书序列号
       $aop->alipayRootCertSN = $aop->getRootCertSN($rootCertPath);//调用getRootCertSN获取支付宝根证书序列号


       $request = new \AlipayTradeAppPayRequest();

       $bizcontent = "{\"body\": \"$subject\","
           . "\"subject\": \"$subject\","
           . "\"out_trade_no\": \"$out_trade_no\","
           . "\"timeout_express\": \"30m\","
           . "\"total_amount\": \"$total_amount\","
           . "\"product_code\":\"QUICK_MSECURITY_PAY\","
           . "\"passback_params\":\"$passback_params\""
           . "}";

       $request->setNotifyUrl(config('alipay.notify_url'));
       $request->setBizContent($bizcontent);

       //这里和普通的接口调用不同,使用的是sdkExecute
       $response = $aop->sdkExecute($request);

       return $response;
   }


   /**
    * 支付宝支付回调
    * @param $data
    * @return bool
    * @throws Exception
    */
   public static function alipayNotify($data){
       $aop = new \AopClient;
       $aop->alipayrsaPublicKey = config('alipay.alipayrsaPublicKey');
       $flag = $aop->rsaCheckV1($data, NULL, "RSA2");
       if($flag){
           if($data['trade_status'] == 'TRADE_SUCCESS'){


               $orderModel = new OrderModel();
               $order_no = $data['out_trade_no'];
               if($data['trade_status'] = 'place'){
                   $orderInfo =  $orderModel->getOrderInfoByOrderNo($order_no);
                  if(!$orderInfo){
                      throw new Exception('订单不存在');
                  }
                  if($orderInfo->pay_status){
                      throw new Exception('订单已支付');
                  }

                  $orderInfo->pay_status = 1;
                  $orderInfo->error_msg = "SUCCESS";
                  $orderInfo->pay_time = time();
                  $orderInfo->real_price = $data['total_amount'];
                  $orderInfo->save();
                   //记录日志
                   UserModel::setIncome($orderInfo->user_id,$orderInfo['pay_price'],1,1,$order_no,'下单-支付宝');
                   return true;

               }else if ($data['trade_status'] = 'recharge'){
                   $rechargeModel = new RechargeModel();
                   $orderInfo = $rechargeModel->where('order_no',$order_no)->find();
                   if($orderInfo){
                       $orderInfo->pay_status = 1;
                       $orderInfo->pay_time = time();
                       $orderInfo->error_msg = "SUCCESS";
                       $orderInfo->real_price = $data['total_amount'];
                       $orderInfo->save();
                       Db::name('user')->where('id',$orderInfo['user_id'])->setInc('balance',$orderInfo['pay_price']);

                       UserModel::setIncome($orderInfo->user_id,$orderInfo['pay_price'],3,1,$order_no,'充值-支付宝');
                       return true;
                   }
               }

           }else{
               return false;
           }
       }
       return false;

   }


   /**
    * 骑士提现到账
    * @param $order_no
    * @param $account
    * @param $price
    * @param $username
    * @return bool
    * @throws \Exception
    */
   public static function withdraw($order_no,$account,$price,$username){

       $aop = new \AopClient ();
       $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
       $aop->appId = config('courier_alipay.appId');
       $aop->rsaPrivateKey = config('courier_alipay.rsaPrivateKey');
       $aop->alipayrsaPublicKey=config('courier_alipay.alipayrsaPublicKey');
       $aop->apiVersion = '1.0';
       $aop->signType = 'RSA2';
       $aop->postCharset='utf-8';
       $aop->format='json';
       $request = new \AlipayFundTransToaccountTransferRequest();
       $request->setBizContent("{" .
           "\"out_biz_no\":\"$order_no\"," .
           "\"payee_type\":\"ALIPAY_LOGONID\"," .
           "\"payee_account\":\"$account\"," .
           "\"amount\":\"$price\"," .
           "\"payer_show_name\":\"科技有限公司\"," .
           "\"payee_real_name\":\"$username\"," .
           "\"remark\":\"提现\"" .
           "}");
       $result = $aop->execute ( $request);

       $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";


       $resultCode = $result->$responseNode->code;
       if(!empty($resultCode)&&$resultCode == 10000){
           return true;
       } else {
           throw new \Exception($result->$responseNode->sub_msg);
       }
   }

}


上一篇: 微信小程序码生成
下一篇: layuiadmin 配置设置