【问题标题】:How do I create an order in paypal and send the email at the same time如何在 paypal 中创建订单并同时发送电子邮件
【发布时间】:2020-09-14 07:51:12
【问题描述】:

我一直在努力解决一个问题,当我尝试向客户发送电子邮件并将他重定向到 paypal 网站(为产品付款)时,他被重定向到 paypal 网站,但电子邮件没有发送(除非我删除负责重定向到贝宝网站的表单)。

我尝试的方法是将所有内容放在一个表单中,然后将按钮命名为发送,如脚本中所示。

 <form method="post" action="/order/createOrder.php">
            First Name: <input type="text" name="first_name"><br>
            Last Name: <input type="text" name="last_name"><br>
            Phone number:<br><textarea rows="5" name="phone_num" cols="30"></textarea><br>
                </div>
                    <button class="btn btn-primary float-right" name="send">Order!</button>
                </div>
            </form>

这是电子邮件的脚本

<?php

    if (isset($_POST["send"])) {

        $to = "hellotest@gmail.com";
        $first_name =  $_POST['first_name'];
        $last_name = $_POST['last_name'];
        $phone_num = $_POST['phone_num'];
        $subject = "Zamowienie";

        foreach(Cart::GetRooms() as $room)

        $message = "Name: " . $first_name . "<br>Last name: " . $last_name . "<br>Phone Number:" . $phone_num . "<br> Room:" . $room->GetData()["title"];



        $headers = "From: testert32@gmail.com\r\n";
        $headers.= "MIME-Version: 1.0\r\n";
        $headers.= "Content-Type: text/html; charset=ISO-8859-1\r\n";
        $headers.= "X-Priority: 1\r\n";


        mail($to, $subject, $message, $headers);
    }

这是重定向代码

<?php
require_once "../settings.php";
require_once BASE_DIR."/lib/PayPal/autoload.php";

use PayPal\Auth\OAuthTokenCredential;
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\RedirectUrls;
use PayPal\Api\Transaction;


$apiContext = new ApiContext(
    new OAuthTokenCredential(
        PAYPAL_CLIENT_ID,
        PAYPAL_SECRET
    )
);

$apiContext->setConfig([
    "mode" => PAYPAL_MODE
]);

// Create new payer and method
$payer = new Payer();
$payer->setPaymentMethod("paypal");

// Set redirect URLs
$redirectUrls = new RedirectUrls();
$redirectUrls->setReturnUrl(PAYPAL_REDIRECT_SUCCESS)
  ->setCancelUrl(PAYPAL_REDIRECT_CANCEL);

$total = 0.0;
$order = [];


$item_list = new ItemList();

foreach (Cart::GetRooms() as $offer) {
      $row = $offer->GetData();
      $item_list = new ItemList();
      $item = new Item();
      $item->setQuantity(1);
      $item->setPrice($row["price"]);
      $item->setCurrency("USD");
      $item->setName( $row["title"]);
      $item->setDescription( $row["short_description"]);
      $item_list->addItem($item);

      $total += $row["price"];
      $order = $row["id"];
}

if ($total === 0.0) {
    http_response_code(404);
    exit("Error: Empty!");
}

// Set payment amount
$amount = new Amount();
$amount->setCurrency("USD")
  ->setTotal($total);

Cart::ClearCart();

// Set transaction object
$transaction = new Transaction();
$transaction->setAmount($amount)
  ->setDescription("Order #2131")
  ->setItemList($item_list);

  // Create the full payment object
$payment = new Payment();
$payment->setIntent('sale')
  ->setPayer($payer)
  ->setRedirectUrls($redirectUrls)
  ->setTransactions(array($transaction));

// Create payment with valid API context
try {
    $payment->create($apiContext);

    // Get PayPal redirect URL and redirect the customer
    $approvalUrl = $payment->getApprovalLink();

    // Redirect the customer to $approvalUrl
    header("Location: $approvalUrl");
  } catch (PayPal\Exception\PayPalConnectionException $ex) {
    echo $ex->getCode();
    echo $ex->getData();
    die($ex);
  } catch (Exception $ex) {
    die($ex);
  }

【问题讨论】:

  • 如果问题出在重定向部分,您也应该添加那段代码

标签: php html email web paypal


【解决方案1】:

不是 PHP 专家,我解决这个问题的方法是不使用标头重定向:

header("Location: $approvalUrl");

而是返回一些带有 &lt;script&gt; 的 HTML,将 window.location.href 修改为 $approvalUrl


实际上,我根本不会使用重定向,而是将结帐升级到这个“上下文”前端:https://developer.paypal.com/demo/checkout/#/pattern/server(让您的网站在后台加载)。

(如果您还没有看到该前端的实际操作,您可以在此处查看客户端演示,该演示将在单击按钮时实际加载结帐:https://developer.paypal.com/demo/checkout/#/pattern/client

此外,您似乎正在使用旧的 v1/payments PayPal-PHP-SDK,所以如果这是一个新的集成,您应该切换到最新的 v2 SDK https://github.com/paypal/Checkout-PHP-SDK

【讨论】:

    【解决方案2】:

    这里是一个实际的 JQuery 示例:

          paypal.Buttons({
          
        style: {
            layout: 'horizontal',
            color: 'gold',
            shape: 'pill',
            label: 'checkout',
            size: 'responsive',
            tagline: 'true',
        },
        
        // Set up the transaction
        createOrder: function(data, actions) {
            $('#paypalmsg').hide();
            $('#transmsg').show();
            $('#transmsg').html('<b>'+'WAITING ON AUTHORIZATION...'+'</b>');
            $('#chkoutmsg').hide()
            return actions.order.create({
                purchase_units: [{
                    description: 'GnG Order',
                    amount: {
                        value: cartTotal
                    }
                }],
                application_context: {
                  shipping_preference: 'NO_SHIPPING'
                }
                
            });
        },
        
        // Finalize the transaction
        onApprove: function(data, actions) {
            return actions.order.capture().then(function(details) {
              /*return actions.order.get().then(function(orderDetails) { */
                    // Show a success message to the buyer
                    $('#transmsg').html('<b>' + 'AUTHORIZED...' + '</b>');
                    $('#transmsg').append('<br>'+'Transaction completed by: ' + details.payer.name.given_name +' '+ details.payer.name.surname + '<br>' + "Order Id: " + details.id + '<br>' + 'Status: PAID & APPROVED'  + '<br>'+ 'Thank You For Your Order'+ '<br>');
                    if (details.status === "COMPLETED") {
                        window.setTimeout(function() {}, 500)
                         $('#transmsg').append('<b>' + 'Sending Order...Please Wait' + 
                        '</b>'+'<br>');
                        $('#transid').val(details.id);
                        $('#orderstat').val('APPROVED');
                        $('#orderform').submit();
                    } 
              });
    

    希望有帮助

    D

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-11
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多