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

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

陈杰3年前 (2020-12-01)PHP2952

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

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

上代码

准备好工具,支付宝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

分享给朋友:

相关文章

laravel分表model映射的思路

预先估计会出现大数据量并且访问频繁的表,将其分为若干个表这种预估大差不差的,论坛里面发表帖子的表,时间长了这张表肯定很大,几十万,几百万都有可能。 聊天室里面信息表,几十个人在一起一聊一个晚上,时间长...

laravel个推设置别名

laravel个推设置别名

上一篇文章我们说过了怎么用laravel接个推的官方sdk实现个推推送和厂商离线推送,因为我们要用到别名推送,而前端又用到的是unipush,在前端去绑定别名的难度肯定要大一点,所以就有一个思路就是,...

laravel跨库多态关联实战

laravel跨库多态关联实战

点赞记录表做了分库分表,位于副库里面表结构该点赞表关联了8个不同的表,因为业务原因,评论回复表有四个板块,所以做了4个评论记录表,4个回复记录表,且结构有细微不同。目标是用户获得被点赞记录,根据不同的...

七牛云删除文件和批量删除文件

在项目中因为用到了七牛云的对象存储,价格公道,也降低我们的项目维护成本。但是在实际使用过程中,例如用户换了头像我们就需要删除用户之前的头像,以降低我们的存储成本。所以研究了一下七牛云的删除单个文件和批...

laravel实现微信公众号授权登录实战

微信公众号授权登录实战框架:laravel依赖:overtrue/wechat首先安装一下easywechat依赖composer require overtrue/wechat:...

通过supervisor管理laravel的queue队列

通过supervisor管理laravel的queue队列

配置文件[program:queue]command=php artisan queue:work redis --tries=3 --delay=3directory=/www/wwwroot/sh...

发表评论

访客

看不清,换一张

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