Я пытаюсь реализовать API
из PayPal payment
с Laravel 5.1
. Но когда я захожу на PayPal (sandbox)
, он использует адрес, который я использовал в своей учетной записи, а также имя учетной записи PayPal, а не данные с моего веб-сайта. Это моя проблема.
Я хочу использовать данные с моего веб-сайта, потому что не имеет смысла вводить адрес доставки (например) с моего веб-сайта и не использовать его. Пожалуйста, посмотрите мой код ниже для справки (или прокомментируйте ниже некоторые детали от меня).
class PaypalPaymentController extends BaseController
{
private $_api_context;
public function __construct(){
$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 payWithPaypal(Request $request){
$payer = new Payer;
$payer->setPaymentMethod('paypal');
$price = 0;
switch($request->get('amount')) {
case '10 books':
$price = 6200;
break;
case '20 books':
$price = 12200;
break;
case '50 books':
$price = 25200;
break;
default:
return redirect()
->route('bookstore.shipping')
->with('danger', 'Please select the right amount of book/s.');
break;
}
$item1 = new Item();
$item1->setName($request->get('amount'))
->setCurrency('PHP')
->setQuantity(1)
->setPrice($price);
$item_list = new ItemList();
$item_list->setItems([$item1]);
$amount = new Amount();
$amount->setCurrency('PHP')
->setTotal($price);
$transaction = new Transaction();
$transaction->setAmount($amount)
->setItemList($item_list)
->setDescription('Books transaction');
$redirect_urls = new RedirectUrls();
$redirect_urls->setReturnUrl(route('bookstore.payment-status'))
->setCancelUrl(route('bookstore.payment-status'));
$payment = new Payment();
$payment->setIntent('Sale')
->setPayer($payer)
->setRedirectUrls($redirect_urls)
->setTransactions([$transaction]);
$patchReplace = new Patch();
$patchReplace->setOp('add')
->setPath('/transactions/0/item_list/shipping_address')
->setValue(json_decode('{
"line1": "345 Lark Ave",
"city": "Montreal",
"state": "QC",
"postal_code": "H1A4K2",
"country_code": "CA"
}'));
$patchRequest = (new PatchRequest())->setPatches([$patchReplace]);
try{
$payment->create($this->_api_context);
$payment->update($patchRequest, $this->_api_context);
} catch(\Palpal\Exception\PPConnectionException $e){
if(\Config::get('app.debug')){
return redirect()
->route('bookstore.shipping')
->with('danger', 'Connection Timeout.');
}
return redirect()
->route('bookstore.shipping')
->with('danger', 'Some error occured, sorry for the inconvenience.');
}
foreach($payment->getLinks() as $link){
if($link->getRel() == 'approval_url'){
$redirect_url = $link->getHref();
break;
}
}
Session::put('paypal_payment_id', $payment->getId());
if(isset($redirect_url)){
return Redirect::away($redirect_url);
}
return redirect()
->route('bookstore.shipping')
->with('danger', 'Unknown error occured.');
}
public function getPaymentStatus(){
$payment_id = Session::get('paypal_payment_id');
Session::forget('paypal_payment_id');
if(empty(Input::get('PayerID')) || empty(Input::get('token'))){
return redirect()
->route('bookstore.shipping')
->with('danger', 'Payment failed.');
}
$payment = Payment::get($payment_id, $this->_api_context);
$execution = new PaymentExecution();
$execution->setPayerId(Input::get('PayerID'));
$result = $payment->execute($execution, $this->_api_context);
if($result->getState() == 'approved'){
// Send Email
$email_data = [
'number_of_books' => $payment->transactions[0]->item_list->items[0]->name,
'shipping' => [
'street' => $payment->payer->payer_info->shipping_address->line1,
'city' => $payment->payer->payer_info->shipping_address->city,
'state' => $payment->payer->payer_info->shipping_address->state,
'country' => $payment->payer->payer_info->shipping_address->country_code,
]
];
// Send email function here ...
return redirect()
->route('bookstore.shipping')
->with('success', 'Transaction payment success!');
}
return redirect()
->route('bookstore.shipping')
->with('danger', 'Payment failed.');
}
}
Я также просмотрел эту ссылку , но похоже, что она не может ответить на мою проблему. Также what if
в стране есть провинция? Как мы можем добавить это?
Обновление 1
- Добавлен новый
Patch()
класс.
- Отредактированный код в
Try Catch
.
Примечание: accepted
ответ также получит bounty
плюс up
.
Обновление 2 с учебником
Для PHP / Laravel (сейчас я использую v5.1), установите этот пакет
PayPal / отдых-апи-СДК-PHP
Создать учетную запись песочницы в PayPal . Выберите Купить с Paypal .
Продолжайте, пока не увидите варианты, выберите Магазин мир .
Войдите на сайт developer.paypal.com .
Нажмите Аккаунты . Нажмите Создать аккаунт .
Выберите, какую страну вы хотите. Выберите Личный (Аккаунт Покупателя) в поле Тип аккаунта.
Добавьте адрес электронной почты, избегайте использования -
. Вместо этого используйте _
.
Введите желаемый баланс PayPal.
Нажмите Создать аккаунт.
Заставить его жить?
https://github.com/paypal/PayPal-PHP-SDK/wiki/Going-Live