当前位置:首页 > PHP > 正文内容

php对接支付宝转账到第三方接口实战

陈杰2年前 (2020-12-01)PHP2504

公司项目有一个用户钱包系统,用户创作的内容可以收到游客的打赏,当然就需要提现的接口了。

最终选定的是支付宝转账接口,公司代收账户直接打款给用户绑定的支付宝账号,再也不用人工手动打款了。

上代码

准备好工具,支付宝sdk,去支付宝开放平台下载啦。

我把sdk放到了根目录下的extend目录下,证书放在extend/alipayPEM/目录下,这个版本的sdk有点老掉牙了,最新的sdk支持composer加载,但是。。。。还能用为啥要去改。。。

这个是转账代码,等着被调用的,调用方写自己的业务逻辑就行了。

<?php
namespace App\Http\Controllers\Extend;

use App\Http\Controllers\Controller;
use App\Model\Financing\FinancingModel;
use App\Model\Financing\FinancingProfitModel;
use App\Model\Member\MemberWalletModel;
use App\Model\Member\WithdrawalModel;
use Illuminate\Http\Request;
use Illuminate\Support\Env;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;

class ExtendController extends Controller
{

   public $alipayRsaPrivateKey = "这段肯定不能让你们看到啊,支付宝私钥";

   public $alipayAppId = "支付宝应用id";
   public $alipayFormat = "json";
   public $alipayCharset = "UTF-8";
   public $alipaySignType = "RSA2";
   public $alipayGatewayUrl = "https://openapi.alipay.com/gateway.do";
   public $alipayRsaPublic = "../extend/alipayPEM/支付宝公钥证书.crt";
   public $alipayRsaApp = "../extend/alipayPEM/应用公钥证书.crt";
   public $alipayRsaRoot = "../extend/alipayPEM/支付宝根证书.crt";

   /**
    * 支付宝转账到第三方
    */
   public function alipay_transfer(WithdrawalModel $withdrawalModel)
   {
       try {
           require_once '../extend/alipay/AopCertClient.php';
           require_once '../extend/alipay/AopClient.php';
           require_once "../extend/alipay/request/AlipayFundTransUniTransferRequest.php";
           $aop                          = new \AopCertClient();
           $aop->gatewayUrl              = $this->alipayGatewayUrl;
           $aop->appId                   = $this->alipayAppId;
           $aop->signType                = $this->alipaySignType;
           $aop->postCharset             = $this->alipayCharset;
           $aop->format                  = $this->alipayFormat;
           $aop->rsaPrivateKey           = $this->alipayRsaPrivateKey;
           $aop->alipayrsaPublicKey      = $aop->getPublicKey($this->alipayRsaPublic);
           $aop->isCheckAlipayPublicCert = true;
           $aop->appCertSN               = $aop->getCertSN($this->alipayRsaApp);
           $aop->alipayRootCertSN        = $aop->getRootCertSN($this->alipayRsaRoot);
           $request = new \AlipayFundTransUniTransferRequest();
           //TRANS_BANKCARD_NO_PWD转账到银行卡 TRANS_ACCOUNT_NO_PWD转账到支付宝
           $request->setBizContent("{" .
               "\"out_biz_no\":\"" . $withdrawalModel['order_id'] . "\"," .
               "\"trans_amount\":" . $withdrawalModel['money'] . "," .
               "\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," .
               "\"biz_scene\":\"DIRECT_TRANSFER\"," .
               "\"order_title\":\"提现代发\"," .
               "\"payee_info\":{" .
               "\"identity\":\"" . $withdrawalModel['payment']['account'] . "\"," .
               "\"identity_type\":\"ALIPAY_LOGON_ID\"," .
               "\"name\":\"" . $withdrawalModel['payment']['name'] . "\"" .
               "    }," .
               "\"remark\":\"" . $withdrawalModel['remark'] . "\"," .
               "  }");
           $request->setNotifyUrl(env('APP_URL') . "/api/extend/alipay_transfer_notify");
           $result       = $aop->execute($request);
           $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
           $resultCode   = $result->$responseNode->code;
           if (!empty($result && $resultCode) && $resultCode == 10000) {
               return $result->$responseNode->pay_fund_order_id;
               return true;
           } else {
               self::returnError($result->$responseNode->sub_msg);
           }
       } catch (\Exception $exception) {
           self::returnError($exception->getMessage());
       }
   }
}



扫描二维码至手机访问

扫描二维码推送至手机访问。

版权声明:本文由何烦过虎溪发布,如需转载请注明出处。

转载请注明出处:http://95shouyou.com/?id=15

分享给朋友:

相关文章

Lumen框架报错Class session does not exist

Lumen框架报错Class session does not exist

由于lumen框架是为速度而生的 Laravel 框架,所以移除了session的支持,虽然在ide中代码提示可以敲出Session::put()方法出来,但是最终还是提示的是Class sessio...

Laravel带条件查询多个count

Laravel带条件查询多个count

在一个数据表中,我们需要用到聚合函数count来查询符合条件的总数。举例一个场景:我们有一个帖子,这个帖子可以分别被好中差评,好中差评记录用一个单独的记录表来存储。如果用户点击好评,那么该帖子作者的经...

Lumen框架报错Cannot declare class Event, because the name is already in use

Lumen框架报错Cannot declare class Event, because the name is already in use

Lumen框架报错信息Cannot declare class Event, because the name is already in use(1/1) ErrorExceptionCa...

利用workerman实现webrtc实时音视频通话

利用workerman实现webrtc实时音视频通话

实现原理利用workerman的websocket实现实时消息传递。webrtc自带p2p功能,利用STUN中继服务器实现webrtc实时音视频看看我们的前端文件,只是一个单页面<html>...

php接拼多多的多多进宝,实现淘客功能

php接拼多多的多多进宝,实现淘客功能

在项目中有一个板块是接拼多多的多多进宝,实现多多客的功能,主要就是拉取商品列表,拉取商品详情,生成推广链接。composer require justmd5/duoduoke-sd...

php对接七牛云短信验证码实战

短信验证码登录的用处非常的大,登录,注册,修改密码,安全相关的啥都可以干。选定的七牛云短信是因为存储也是用的七牛云,七牛的sdk都加载进来了,也懒得去换其他的厂家了。下面上代码:Controller层...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。