PayPal 单笔付款到电子邮件
Posted
技术标签:
【中文标题】PayPal 单笔付款到电子邮件【英文标题】:PayPal Single Payout to an Email 【发布时间】:2018-07-27 18:54:35 【问题描述】:我正在尝试集成 PayPal 的付款选项,以便能够通过提供电子邮件直接向用户付款。
我正在通过带有 POST 方法的表单调用控制器函数,在调用 simplePay 函数后,我得到的只是一个空白页,我想知道我所做的是否正确、不完整(以及它的缺乏)或错误(我做错了什么)。
我的研究基于 Paypal 文档提供的代码示例。 https://github.com/paypal/PayPal-php-SDK/blob/master/sample/payouts/CreateBatchPayout.php
路线:
Route::post('/simplePay', 'PaypalController@simplePay');
控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use PayPal\Rest\ApiContext;
use PayPal\Api\Amount;
use PayPal\Api\Details;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\Payer;
use PayPal\Api\Payment;
use PayPal\Api\Transaction;
use PayPal\Api\RedirectUrls;
use PayPal\Api\ExecutePayment;
use PayPal\Api\PaymentExecution;
use PayPal\Auth\OAuthTokenCredential;
class PaypalController extends Controller
private $_api_context;
public function __construct()
// setup PayPal api context
$paypal_conf = \Config::get('paypal');
$this->_api_context = new ApiContext(new OAuthTokenCredential($paypal_conf['client_id'], $paypal_conf['secret']));
$this->_api_context->setConfig($paypal_conf['settings']);
public function simplePay()
$payouts = new \PayPal\Api\Payout();
$senderBatchHeader = new \PayPal\Api\PayoutSenderBatchHeader();
$senderBatchHeader->setSenderBatchId(uniqid())->setEmailSubject("You have a Payout!");
$senderItem = new \PayPal\Api\PayoutItem();
$senderItem->setRecipientType('Email')->setNote('Thanks for your patronage!')->setReceiver('email@gmail.com')->setSenderItemId("001")->setAmount(new \PayPal\Api\Currency('
"value":"1.00",
"currency":"MXN"
'));
$payouts->setSenderBatchHeader($senderBatchHeader)->addItem($senderItem);
$request = clone $payouts;
try
$output = $payouts->createSynchronous($this->_api_context);
catch (\Exception $ex)
// \ResultPrinter::printError("Created Single Synchronous Payout", "Payout", null, $request, $ex);
exit(1);
// \ResultPrinter::printResult("Created Single Synchronous Payout", "Payout", $output->getBatchHeader()->getPayoutBatchId(), $request, $output);
return $output;
调用控制器:
<div class="row">
<form class="form-horizontal" role="form" enctype="multipart/form-data" method="POST" action=" url('/simplePay') ">
csrf_field()
<input type="submit" name="submit" value="Pay">
</form>
</div>
paypal.php - 应用程序/配置文件 - 以防万一:
<?php
return array(
// set your paypal credential
'client_id' => 'AXs...',
'secret' => 'AHE...',
/**
* SDK configuration
*/
'settings' => array(
/**
* Available option 'sandbox' or 'live'
*/
'mode' => 'sandbox',
/**
* Specify the max request time in seconds
*/
'http.ConnectionTimeOut' => 12000,
/**
* Whether want to log to a file
*/
'log.LogEnabled' => true,
/**
* Specify the file that want to write on
*/
'log.FileName' => storage_path() . '/logs/paypal.log',
/**
* Available option 'FINE', 'INFO', 'WARN' or 'ERROR'
*
* Logging is most verbose in the 'FINE' level and decreases as you
* proceed towards ERROR
*/
'log.LogLevel' => 'FINE'
),
);
【问题讨论】:
您的代码在抛出错误时终止执行,这就是您看到空白页的原因,您应该将exit(1);
替换为dd($ex);
之类的内容,然后从那里进行调试。对于这样一个一般性问题,我们无法为您提供帮助,您需要自己进行基本调试,然后根据具体问题更新您的问题。
okidoki 让我尝试调试,如有任何疑问,我会发布!谢谢你的建议。
这是错误:SYNC_MODE_NOT_APPLICABLE - "message":"同步模式将很快被弃用,并且不再可用于新的集成。您可以通过在请求中指定 sync_mode= false 来使用异步模式。 " "developer.paypal.com/docs/api/payments.payouts-batch/#errors" 通过在 /vendor/paypal/rest-api-sdk-php/lib/PayPal/Api/Payout.php 上编辑同步模式解决 :) 谢谢 SAM!
@ChristianPérezCadavid 感谢您的跟进,您帮助了我!
【参考方案1】:
PayPal 同步模式不适用于新的集成。如果您通过 "sync_mode = true"
,现有集成将继续运行。
要解决这个问题,你需要传递"sync_mode = false"
所以而不是
$output = $payouts->createSynchronous($this->_api_context);
使用以下内容:
$output = $payouts->create(array('sync_mode' => 'false'), $this->_api_context);
【讨论】:
以上是关于PayPal 单笔付款到电子邮件的主要内容,如果未能解决你的问题,请参考以下文章