{"id":1119,"date":"2025-06-12T13:27:52","date_gmt":"2025-06-12T05:27:52","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1119.html"},"modified":"2025-06-12T13:27:53","modified_gmt":"2025-06-12T05:27:53","slug":"%e5%a6%82%e4%bd%95%e5%b0%86paypal%e6%94%af%e4%bb%98%e4%b8%8esymfony%e9%9b%86%e6%88%90%ef%bc%886%e6%ad%a5%ef%bc%89","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1119.html","title":{"rendered":"\u5982\u4f55\u5c06PayPal\u652f\u4ed8\u4e0eSymfony\u96c6\u6210\uff086\u6b65\uff09"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#23558;PayPal&#25903;&#20184;&#19982;Symfony&#38598;&#25104;&#26159;&#19968;&#20010;&#30456;&#23545;&#31616;&#21333;&#30340;&#36807;&#31243;&#65292;&#20197;&#19979;&#26159;&#35814;&#32454;&#30340;&#27493;&#39588;&#25351;&#21335;&#65306;<\/p>\n<h3>1. &#27880;&#20876;&#24182;&#37197;&#32622;PayPal&#36134;&#25143;<\/h3>\n<ol>\n<li><strong>&#30331;&#24405;&#21040;PayPal&#36134;&#25143;<\/strong>&#65306;&#35775;&#38382;<a href=\"https:\/\/www.zhaozhao123.cn\/skin\/go?url=aHR0cHM6Ly93d3cucGF5cGFsLmNvbS8=\" rel=\"noopener noreferrer nofollow\">PayPal&#23448;&#32593;<\/a>&#24182;&#27880;&#20876;&#19968;&#20010;&#26032;&#36134;&#25143;&#12290;<\/li>\n<li><strong>&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#24212;&#29992;&#31243;&#24207;<\/strong>&#65306;\n<ul>\n<li>&#22312;&ldquo;My Account&rdquo;&#39029;&#38754;&#65292;&#28857;&#20987;&ldquo;Selling Tools&rdquo; -&gt; &ldquo;Apps &amp; Websites&rdquo;&#12290;<\/li>\n<li>&#28857;&#20987;&ldquo;Create App&rdquo;&#25353;&#38062;&#12290;<\/li>\n<li>&#36755;&#20837;&#24212;&#29992;&#30340;&#21517;&#31216;&#12289;&#25551;&#36848;&#21644;&#30005;&#23376;&#37038;&#20214;&#22320;&#22336;&#65292;&#28982;&#21518;&#28857;&#20987;&ldquo;Create App&rdquo;&#12290;<\/li>\n<\/ul><\/li>\n<\/ol>\n<h3>2. &#33719;&#21462;API&#23494;&#38053;<\/h3>\n<ol>\n<li><strong>&#29983;&#25104;API&#23494;&#38053;<\/strong>&#65306;\n<ul>\n<li>&#30331;&#24405;&#21040;PayPal&#24320;&#21457;&#32773;&#25511;&#21046;&#21488;&#12290;<\/li>\n<li>&#25214;&#21040;&#20320;&#21018;&#21018;&#21019;&#24314;&#30340;&#24212;&#29992;&#65292;&#24182;&#28857;&#20987;&ldquo;Keys &amp; Access Tokens&rdquo;&#12290;<\/li>\n<li>&#28857;&#20987;&ldquo;Create New Key&rdquo;&#25353;&#38062;&#12290;<\/li>\n<li>&#36873;&#25321;&ldquo;Production&rdquo;&#29615;&#22659;&#65292;&#28982;&#21518;&#28857;&#20987;&ldquo;Generate Keys&rdquo;&#12290;<\/li>\n<\/ul><\/li>\n<\/ol>\n<h3>3. &#37197;&#32622;Symfony&#39033;&#30446;<\/h3>\n<ol>\n<li><strong>&#23433;&#35013;PayPalBundle<\/strong>&#65306;\n<pre><code class=\"language-bash\">composer require paypal\/paypal-bundle<\/code><\/pre><\/li>\n<li><strong>&#20462;&#25913;<code>config\/packages\/dev.php<\/code>&#25991;&#20214;<\/strong>&#65306;\n<pre><code class=\"language-php\">\/\/ config\/packages\/dev.php\nreturn [\n   'paypal' =&gt; [\n       'client_id' =&gt; 'YOUR_PAYPAL_CLIENT_ID',\n       'secret' =&gt; 'YOUR_PAYPAL_SECRET',\n       'environment' =&gt; 'sandbox', \/\/ &#25110;&#32773; 'live'\n   ],\n];<\/code><\/pre><\/li>\n<\/ol>\n<h3>4. &#21019;&#24314;&#25903;&#20184;&#25511;&#21046;&#22120;<\/h3>\n<ol>\n<li>\n<p><strong>&#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#26469;&#22788;&#29702;&#25903;&#20184;&#35831;&#27714;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Controller\/PaymentController.php\nnamespace AppController;\n\nuse PayPalApiAmount;\nuse PayPalApiPayer;\nuse PayPalApiPayment;\nuse PayPalApiRedirectUrls;\nuse PayPalApiTransaction;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentHttpFoundationResponse;\n\nclass PaymentController extends AbstractController\n{\n   public function pay(Request $request)\n   {\n       $payer = new Payer();\n       $payer-&gt;setPaymentMethod('paypal');\n\n       $amount = new Amount();\n       $amount-&gt;setCurrency('USD');\n       $amount-&gt;setTotal(100);\n\n       $transaction = new Transaction();\n       $transaction-&gt;setAmount($amount);\n       $transaction-&gt;setDescription('Test payment');\n\n       $redirectUrls = new RedirectUrls();\n       $redirectUrls-&gt;setReturnUrl('http:\/\/example.com\/success')\n                     -&gt;setCancelUrl('http:\/\/example.com\/cancel');\n\n       $payment = new Payment();\n       $payment-&gt;setIntent('sale')\n              -&gt;setPayer($payer)\n              -&gt;setTransactions([$transaction])\n              -&gt;setRedirectUrls($redirectUrls);\n\n       try {\n           $payment-&gt;create($this-&gt;get('paypal.client'));\n           $approvalUrl = $payment-&gt;getApprovalLink();\n\n           return new Response('&lt;a href=\"' . $approvalUrl . '\"&gt;Pay with PayPal&lt;\/a&gt;');\n       } catch (Exception $e) {\n           return new Response('Error: ' . $e-&gt;getMessage());\n       }\n   }\n\n   public function success()\n   {\n       $paymentId = $this-&gt;request-&gt;query-&gt;get('paymentId');\n       $payerId = $this-&gt;request-&gt;query-&gt;get('payerId');\n\n       try {\n           $payment = PayPalRestApiContext::getApiContext()-&gt;getPaymentById($paymentId, 'sandbox'); \/\/ &#25110;&#32773; 'live'\n\n           if ($payment-&gt;getState() == 'approved') {\n               \/\/ Payment approved\n               return new Response('Payment successful!');\n           } else {\n               \/\/ Payment failed\n               return new Response('Payment failed.');\n           }\n       } catch (Exception $e) {\n           return new Response('Error: ' . $e-&gt;getMessage());\n       }\n   }\n\n   public function cancel()\n   {\n       return new Response('Payment cancelled.');\n   }\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>5. &#23450;&#20041;&#36335;&#30001;<\/h3>\n<ol>\n<li>\n<p><strong>&#23450;&#20041;&#36335;&#30001;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-yaml\"># config\/routes.yaml\napp_pay:\n   path: \/pay\n   controller: AppControllerPaymentController::pay\n\napp_success:\n   path: \/success\n   controller: AppControllerPaymentController::success\n\napp_cancel:\n   path: \/cancel\n   controller: AppControllerPaymentController::cancel<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>6. &#27979;&#35797;&#25903;&#20184;&#27969;&#31243;<\/h3>\n<ol>\n<li><strong>&#36816;&#34892;&#24320;&#21457;&#26381;&#21153;&#22120;<\/strong>&#65306;\n<pre><code class=\"language-bash\">symfony server:start<\/code><\/pre><\/li>\n<li><strong>&#25171;&#24320;&#27983;&#35272;&#22120;<\/strong>&#65292;&#35775;&#38382;<code>http:\/\/localhost:8000\/pay<\/code>&#65292;&#25353;&#29031;&#25552;&#31034;&#23436;&#25104;&#25903;&#20184;&#12290;<\/li>\n<\/ol>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#24212;&#35813;&#33021;&#22815;&#25104;&#21151;&#23558;PayPal&#25903;&#20184;&#19982;Symfony&#38598;&#25104;&#12290;&#22914;&#26524;&#20320;&#36935;&#21040;&#20219;&#20309;&#38382;&#39064;&#65292;&#35831;&#26816;&#26597;&#26085;&#24535;&#21644;&#38169;&#35823;&#20449;&#24687;&#65292;&#20197;&#33719;&#21462;&#26356;&#22810;&#24110;&#21161;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#24403;&#28041;&#21450;&#21040;&#23558;&#25903;&#20184;&#35299;&#20915;&#26041;&#26696;&#19982;Web&#24212;&#29992;&#31243;&#24207;&#38598;&#25104;&#26102;&#65292;PayPal&#22240;&#20854;&#20840;&#29699;&#35206;&#30422;&#33539;&#22260;&#21644;&#26131;&#29992;&#24615;&#32780;&#25104;&#20026;&#26368;&#30693;&#21517;&#30340;&#24179;&#21488;&#20043;&#19968;&#12290;Symfony&#65292;&#19968;&#20010;&#20805;&#28385;&#21487;&#37325;&#29992;&#32452;&#20214;&#30340;PHP&#26694;&#26550;&#65292;&#20197;&#20854;&#39640;&#24615;&#33021;&#24212;&#29992;&#30340;&#28145;&#24605;&#29087;&#34385;&#21746;&#23398;&#20197;&#21450;&#21487;&#38752;&#24615;&#21644;&#25928;&#29575;&#32780;&#33879;&#31216;&#12290;&#26412;&#25945;&#31243;&#23558;&#25351;&#23548;&#24744;&#22312;Symfony&#24212;&#29992;&#31243;&#24207;&#20013;&#23454;&#29616;PayPal&#20184;&#27454;&#30340;&#21151;&#33021;&#12290;<\/p><p>&#21069;&#32622;&#26465;&#20214;&#65306;<\/p><p>PayPal &#24320;&#21457;&#32773;&#36134;&#25143;<\/p><p>Composer&#24050;&#20840;&#23616;&#23433;&#35013;&#12290;<\/p><p>&#20102;&#35299;PHP&#21644;Symfony&#26694;&#26550;<\/p><p>Symfony &#24212;&#29992;&#31243;&#24207;&#30340;&#35774;&#32622;<\/p><h2>&#27493;&#39588;&#25351;&#21335;<\/h2><h3>&#27493;&#39588;1&#65306;&#21019;&#24314;PayPal&#24320;&#21457;&#32773;&#36134;&#25143;<\/h3><p>&#22312;&#24320;&#22987;&#32534;&#30721;&#20043;&#21069;&#65292;&#20320;&#38656;&#35201;&#20808;&#35774;&#32622;&#19968;&#20010;PayPal&#24320;&#21457;&#32773;&#36134;&#25143;&#12290;&#35831;&#35775;&#38382;<a href=\"https:\/\/www.zhaozhao123.cn\/skin\/go?url=aHR0cHM6Ly9kZXZlbG9wZXIucGF5cGFsLmNvbS8mIzI0MTgyOyYjMjc4ODA7JiMyMDg3NjsmIzI1MTEwOyYjMzAzMzE7JiMyNDQwNTsmIzY1Mjg4OyYjMjI5MTQ7JiMyNjUyNDsmIzI0MDUwOyYjMjYzNzc7JiMzNjEzNDsmIzIxNDk1OyYjNjUyODk7JiMxMjI5MDsmIzIwMDQzOyYjMjE1MTg7JiM2NTI5MjsmIzM1ODMxOyYjMjM1NDg7JiMzMzMyMjsmIzIxMDQwOyYjMjAyMDI7JiMzNDkyMDsmIzI2NDk1OyYjNjUyOTI7JiMyMTAxOTsmIzI0MzE0OyYjMTk5Njg7JiMyMDAxMDsmIzI3OTc5OyYjMzU3OTc7JiMyOTk5MjsmIzMwMzQwOyYjMjc4MDE7JiMzMDQxODsmIzM2MTM0OyYjMjUxNDM7JiMxMjI5MDsmIzM1ODMxOyYjMzU3NjA7JiMyMDMwMzsmIzI0NzQ0OyYjMzAzNDA7JiMyMzQ1ODsmIzI1MTQzOyYjMzE0NzE7SUQmIzIxNjQ0OyYjMjM0OTQ7JiMzODA1MzsmIzY1MjkyOyYjMjIyNDA7JiMyMDAyNjsmIzI0NzQ0OyYjMjM1NTg7JiMyNjQ2OTsmIzM4NjU2OyYjMzUyMDE7JiMyMDM1MTsmIzI5OTkyOyYjMjM0Mjc7JiMyMDIwNDsmIzAzODsjMTIyOTA=\" rel=\"noopener noreferrer nofollow\" rel=\"nofollow\">https:\/\/developer.paypal.com\/&#24182;&#27880;&#20876;&#25110;&#30331;&#24405;&#65288;&#22914;&#26524;&#24050;&#26377;&#36134;&#21495;&#65289;&#12290;&#20043;&#21518;&#65292;&#35831;&#23548;&#33322;&#21040;&#20202;&#34920;&#26495;&#65292;&#21019;&#24314;&#19968;&#20010;&#27979;&#35797;&#29992;&#30340;&#27801;&#30418;&#36134;&#25143;&#12290;&#35831;&#35760;&#20303;&#24744;&#30340;&#23458;&#25143;&#31471;ID&#21644;&#23494;&#38053;&#65292;&#22240;&#20026;&#24744;&#23558;&#26469;&#38656;&#35201;&#20351;&#29992;&#23427;&#20204;&#038;#12290<\/a>;<\/p><h3>&#27493;&#39588;2&#65306;&#23433;&#35013;PayPal&#30340;PHP SDK<\/h3><p>&#20351;&#29992; Composer&#65292;&#36816;&#34892;&#20197;&#19979;&#21629;&#20196;&#26469;&#23433;&#35013; PayPal REST SDK&#65306;<\/p><pre><code>composer require paypal\/rest-api-sdk-php<\/code><\/pre><p>&#36825;&#20010;PayPal&#30340;PHP SDK&#23558;&#20415;&#20110;&#19982;PayPal&#30340;API&#36827;&#34892;&#36890;&#20449;&#12290;<\/p><h3>&#27493;&#39588;3&#65306;&#37197;&#32622;PayPal SDK<\/h3><p>&#22312;&#24744;&#30340;Symfony&#24212;&#29992;&#20013;&#65292;&#24744;&#38656;&#35201;&#37197;&#32622;PayPal SDK&#30340;&#21442;&#25968;&#12290;&#36825;&#20010;&#37197;&#32622;&#36890;&#24120;&#20301;&#20110;&#12290;<code>services.yaml<\/code>&#35831;&#21442;&#38405;&#20197;&#19979;&#37197;&#32622;&#25991;&#20214;&#65288;&#20363;&#22914;&#65292;&#21333;&#29420;&#30340;&#37197;&#32622;&#25991;&#20214;&#65289;&#12290;<code>config\/packages\/paypal.yaml<\/code>&#65306;)<\/p><pre><code>parameters:\n    paypal.client_id: 'Your-Client-ID'\n    paypal.secret: 'Your-Secret-Key'\n    paypal.settings:\n        mode: 'sandbox' # Use sandbox for development and testing\n        http.ConnectionTimeOut: 30\n        log.LogEnabled: true\n        log.FileName: '%kernel.logs_dir%\/PayPal.log'\n        log.LogLevel: 'FINE'<\/code><\/pre><p>&#21019;&#24314;&#19968;&#20010;&#26381;&#21153;&#31867;&#26469;&#31649;&#29702;PayPal&#20132;&#26131;&#65292;&#22914;&#19979;&#25152;&#31034;&#65306;<\/p><pre><code>namespace AppService;\n\nuse PayPalRestApiContext;\nuse PayPalAuthOAuthTokenCredential;\n\nclass PayPalService {\n    private $apiContext;\n\n    public function __construct(string $clientId, string $secret) {\n        $this-&gt;apiContext = new ApiContext(\n            new OAuthTokenCredential(\n                $clientId,\n                $secret\n            )\n        );\n\n        $this-&gt;apiContext-&gt;setConfig(\n            $this-&gt;getParameter('paypal.settings')\n        );\n    }\n\n    \/\/ other methods will go here\n}<\/code><\/pre><h3>&#27493;&#39588;4&#65306;&#22788;&#29702;&#20184;&#27454;<\/h3><p>&#21019;&#24314;&#19968;&#20010;&#25903;&#20184;&#36335;&#30001;&#21644;&#30456;&#24212;&#30340;&#22788;&#29702;&#26041;&#27861;&#65292;&#29992;&#20110;&#22788;&#29702;&#20184;&#27454;&#22788;&#29702;&#12290;<\/p><pre><code>namespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentRoutingAnnotationRoute;\nuse AppServicePayPalService;\n\nclass PaymentController extends AbstractController {\n    #[Route('\/payment', name: 'payment')]\n    public function index(PayPalService $payPalService) {\n        \/\/ Payment processing logic goes here\n    }\n}<\/code><\/pre><p>&#22312;&#24744;&#30340;&#25903;&#20184;&#26041;&#24335;&#20013;&#65292;&#24744;&#38656;&#35201;&#26500;&#24314;&#19968;&#20010;&#25903;&#20184;&#23545;&#35937;&#65292;&#35813;&#23545;&#35937;&#21253;&#21547;&#35746;&#21333;&#35814;&#24773;&#12289;&#20080;&#23478;&#20449;&#24687;&#20197;&#21450;&#25104;&#21151;&#25110;&#22833;&#36133;&#24773;&#20917;&#30340;&#37325;&#23450;&#21521;URL&#12290;PayPal &#26381;&#21153;&#20250;&#22788;&#29702;&#20184;&#27454;&#25191;&#34892;&#65292;&#20351;&#29992;&#35832;&#22914;&#30340;&#26041;&#27861;&#12290;<code>createPayment<\/code>and &#26159;&#20013;&#25991;&#37324;&#30340;&ldquo;&#21644;&rdquo;&#65292;&#34920;&#31034;&#24182;&#21015;&#25110;&#32852;&#21512;&#30340;&#24847;&#24605;&#12290;<code>executePayment<\/code>&#22312;&#20080;&#23478;&#23457;&#25209;&#21518;&#12290;<\/p><h3>&#27493;&#39588; 5&#65306;&#27979;&#35797;&#20184;&#27454;&#27969;&#31243;<\/h3><p>&#30830;&#20445;&#22312;PayPal&#25552;&#20379;&#30340;&#27979;&#35797;&#36134;&#25143;&#19978;&#36827;&#34892;&#38598;&#25104;&#27979;&#35797;&#12290;&#36825;&#26679;&#21487;&#20197;&#30830;&#20445;&#20132;&#26131;&#36816;&#34892;&#39034;&#30021;&#65292;&#32780;&#26080;&#38656;&#23454;&#38469;&#36716;&#31227;&#36164;&#37329;&#12290;&#32463;&#36807;&#24443;&#24213;&#30340;&#27979;&#35797;&#21518;&#65292;&#20320;&#21487;&#20197;&#20999;&#25442;PayPal&#35774;&#32622;&#20174;&ldquo;&#27979;&#35797;&rdquo;&#27169;&#24335;&#21040;&ldquo;&#30495;&#23454;&rdquo;&#27169;&#24335;&#65292;&#26356;&#26032;&#20351;&#29992;&#20320;&#30340;&#23454;&#21517;&#36134;&#21495;&#20449;&#24687;&#12290;<\/p><h3>&#27493;&#39588; 6&#65306;&#22788;&#29702; PayPal Webhooks<\/h3><p>&#23545;&#20110;&#25903;&#20184;&#20107;&#20214;&#65288;&#22914;&#20184;&#27454;&#23436;&#25104;&#12289;&#25764;&#38144;&#65289;&#30340;&#21487;&#38752;&#36890;&#20449;&#65292;&#35774;&#32622;PayPal&#30340;Webhook&#22312;Symfony&#24212;&#29992;&#31243;&#24207;&#20013;&#33267;&#20851;&#37325;&#35201;&#12290;Webhook&#21487;&#20197;&#30417;&#21548;&#29305;&#23450;&#20107;&#20214;&#24182;&#30456;&#24212;&#22320;&#20570;&#20986;&#21453;&#24212;&#65292;&#20363;&#22914;&#21457;&#36865;&#35746;&#21333;&#30830;&#35748;&#37038;&#20214;&#25110;&#26356;&#26032;&#25968;&#25454;&#24211;&#35760;&#24405;&#20197;&#21453;&#26144;&#25903;&#20184;&#29366;&#24577;&#12290;<\/p><p>&#29616;&#22312;&#24744;&#24050;&#32463;&#26377;&#20102;&#38598;&#25104;PayPal&#25903;&#20184;&#30340;&#22522;&#26412;&#24819;&#27861;&#65292;&#35753;&#25105;&#20204;&#36827;&#19968;&#27493;&#32454;&#21270;&#25105;&#20204;&#30340;&#23454;&#29616;&#12290;&#23433;&#20840;&#25514;&#26045;&#22914;&#39564;&#35777;PayPal Webhook&#20063;&#38750;&#24120;&#37325;&#35201;&#12290;&#22312;&#29983;&#20135;&#29615;&#22659;&#20013;&#38656;&#35201;&#35774;&#32622;&#38169;&#35823;&#22788;&#29702;&#26426;&#21046;&#20197;&#30830;&#20445;&#31995;&#32479;&#21487;&#20197;&#27491;&#24120;&#36816;&#34892;&#65292;&#24182;&#19988;&#20063;&#35201;&#30830;&#20445;&#35760;&#24405;&#20219;&#20309;&#24322;&#24120;&#25110;&#20132;&#26131;&#20197;&#20415;&#20110;&#25925;&#38556;&#25490;&#38500;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#38598;&#25104;PayPal&#19982;Symfony&#65292;&#20026;&#24744;&#30340;&#24212;&#29992;&#25552;&#20379;&#24378;&#22823;&#30340;&#25903;&#20184;&#24179;&#21488;&#65292;&#20840;&#29699;&#20449;&#36182;&#12290;&#36890;&#36807;&#20180;&#32454;&#36981;&#24490;&#27599;&#19968;&#27493;&#24182;&#30830;&#20445;&#22312;&#23433;&#20840;&#24615;&#21644;&#38169;&#35823;&#22788;&#29702;&#26041;&#38754;&#30340;&#26368;&#20339;&#23454;&#36341;&#65292;&#24744;&#30340;Symfony&#24212;&#29992;&#31243;&#24207;&#23558;&#33021;&#22815;&#23433;&#20840;&#12289;&#39640;&#25928;&#22320;&#22788;&#29702;&#20184;&#27454;&#65292;&#25552;&#20379;&#26356;&#20339;&#30340;&#29992;&#25143;&#20307;&#39564;&#12290;<\/p><p>&#36947;&#36335;&#26080;&#23613;&#65292;&#20294;&#25104;&#21151;&#30340;&#25972;&#21512;&#38656;&#35201;&#23545;PayPal API&#12289;Symfony&#26381;&#21153;&#20197;&#21450;&#23427;&#20204;&#22914;&#20309;&#21327;&#21516;&#24037;&#20316;&#26469;&#22788;&#29702;&#20132;&#26131;&#26377;&#25166;&#23454;&#30340;&#29702;&#35299;&#12290;&#20973;&#20511;&#27589;&#21147;&#21644;&#35814;&#32454;&#30340;&#24037;&#20316;&#65292;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#23558;&#22312;&#21487;&#29992;&#30340;&#26368;&#24378;&#22823;&#25903;&#20184;&#31995;&#32479;&#19978;&#36816;&#34892;&#24471;&#24456;&#24555;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#35201;&#23558;PayPal&#25903;&#20184;&#38598;&#25104;&#21040;&#24744;&#30340;Symfony&#24212;&#29992;&#31243;&#24207;&#20013;&#65292;&#24744;&#21487;&#20197;&#25353;&#29031;&#20197;&#19979;&#20845;&#20010;&#27493;&#39588;&#25805;&#20316;&#65306;<\/p>\n<h3>1. &#35774;&#32622;PayPal&#24080;&#25143;<\/h3>\n<p>&#39318;&#20808;&#65292;&#24744;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;PayPal&#36134;&#25143;&#65292;&#24182;&#33719;&#24471;API&#23494;&#38053;&#21644;&#35777;&#20070;&#12290;<\/p>\n<ul>\n<li>&#30331;&#24405;PayPal Developer Portal&#12290;<\/li>\n<li>&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#24212;&#29992;&#31243;&#24207;&#12290;<\/li>\n<li>&#22312;&ldquo;API&#23494;&#38053;&rdquo;&#37096;&#20998;&#33719;&#21462;API&#23494;&#38053;&#21644;&#35777;&#20070;&#25991;&#20214;&#12290;<\/li>\n<\/ul>\n<h3>2. &#23433;&#35013;PayPal SDK<\/h3>\n<p>&#20351;&#29992;Composer&#23433;&#35013;PayPal PHP SDK:<\/p>\n<pre><code class=\"language-bash\">composer require paypal\/rest-api-sdk<\/code><\/pre>\n<p>&#25110;&#32773;&#22914;&#26524;&#24744;&#24076;&#26395;&#20351;&#29992;PHP&#29256;&#26412;&#36739;&#20302;&#30340;&#24037;&#20855;&#21253;&#65292;&#35831;&#21442;&#32771;<a href=\"https:\/\/www.zhaozhao123.cn\/skin\/go?url=aHR0cHM6Ly9kZXZlbG9wZXIucGF5cGFsLmNvbS9kb2NzL2NsYXNzaWMvcGF5cGFsLXJlc3QtYXBpLw==\" rel=\"noopener noreferrer nofollow\">PayPal&#23448;&#26041;&#25991;&#26723;<\/a>.<\/p>\n<h3>3. &#35774;&#32622;PayPal API&#20973;&#35777;<\/h3>\n<p>&#22312;&#24744;&#30340;&#39033;&#30446;&#20013;&#35774;&#32622;PayPal API&#20973;&#35777;&#65292;&#20197;&#20415;PayPal REST API&#33021;&#22815;&#27491;&#30830;&#22320;&#35775;&#38382;&#24744;&#30340;&#24080;&#25143;&#12290;<\/p>\n<pre><code class=\"language-php\">use PayPalApiRest;\n\n\/\/ &#23558;&#27492;&#22788;&#26367;&#25442;&#20026;&#24744;&#30340;API&#23494;&#38053;\n$apiSecret = 'your_api_secret';\n$merchantId = 'your_merchant_id';\n\n\/\/ &#21019;&#24314;&#19968;&#20010;REST API&#23545;&#35937;\n$restApi = new Rest($apiSecret, $merchantId);\n\n\/\/ &#20351;&#29992;API&#20973;&#35777;&#36827;&#34892;&#35843;&#29992;\n$response = $restApi-&gt;getAccountInfo();\nprint_r($response);<\/code><\/pre>\n<h3>4. &#35774;&#32622;PayPal Payflow Configuration<\/h3>\n<p>&#37197;&#32622;PayPal Payflow&#20197;&#25903;&#25345;&#24744;&#30340;&#24212;&#29992;&#12290;&#36825;&#36890;&#24120;&#28041;&#21450;&#26356;&#26032;&#24744;&#30340;&#24212;&#29992;&#37197;&#32622;&#20197;&#20801;&#35768;&#29305;&#23450;&#31867;&#22411;&#30340;&#20184;&#27454;&#26041;&#24335;&#12290;<\/p>\n<h3>5. &#23454;&#29616;PayPal&#25903;&#20184;&#22788;&#29702;&#36923;&#36753;<\/h3>\n<p>&#26681;&#25454;&#24744;&#30340;&#19994;&#21153;&#38656;&#27714;&#65292;&#23454;&#29616;PayPal&#25903;&#20184;&#22788;&#29702;&#36923;&#36753;&#12290;&#20363;&#22914;&#65292;&#21019;&#24314;&#19968;&#20010;&#31867;&#26469;&#22788;&#29702;PayPal&#25903;&#20184;&#35831;&#27714;&#24182;&#29983;&#25104;&#30456;&#24212;&#30340;&#35746;&#21333;&#29366;&#24577;&#12290;<\/p>\n<pre><code class=\"language-php\">class PaypalPaymentHandler {\n    private $paymentRequest;\n    private $orderId;\n\n    public function __construct(PaypalPaymentRequest $paymentRequest) {\n        $this-&gt;paymentRequest = $paymentRequest;\n    }\n\n    public function process() {\n        \/\/ &#26681;&#25454;&#24744;&#30340;&#19994;&#21153;&#36923;&#36753;&#22788;&#29702;PayPal&#25903;&#20184;&#35831;&#27714;\n        $this-&gt;processPaypalPayment();\n\n        \/\/ &#29983;&#25104;&#35746;&#21333;&#29366;&#24577;\n        $this-&gt;generateOrderStatus();\n    }\n\n    private function processPaypalPayment() {\n        \/\/ &#35843;&#29992;PayPal API&#22788;&#29702;&#25903;&#20184;&#35831;&#27714;\n    }\n\n    private function generateOrderStatus() {\n        \/\/ &#29983;&#25104;&#35746;&#21333;&#29366;&#24577;&#65292;&#22914;\"Processing\", \"Shipped\", etc.\n    }\n}<\/code><\/pre>\n<h3>6. &#27979;&#35797;&#21644;&#37096;&#32626;<\/h3>\n<p>&#30830;&#20445;&#27979;&#35797;&#24744;&#30340;PayPal&#25903;&#20184;&#21151;&#33021;&#26080;&#35823;&#21518;&#65292;&#20877;&#23558;&#20854;&#37096;&#32626;&#21040;&#29983;&#20135;&#29615;&#22659;&#20013;&#12290;<\/p>\n<h3>&#31034;&#20363;&#20195;&#30721;&#29255;&#27573;<\/h3>\n<p>&#20197;&#19979;&#26159;&#20351;&#29992;<code>paypal-rest-api-sdk<\/code>&#23436;&#25104;&#19978;&#36848;&#27493;&#39588;&#30340;&#19968;&#20010;&#31034;&#20363;&#20195;&#30721;&#27573;&#65306;<\/p>\n<pre><code class=\"language-php\">require_once 'vendor\/autoload.php'; \/\/ Ensure you have the autoload file in place.\n\nuse PayPalApiRest;\nuse PayPalAuthOAuthTokenCredential;\n\n\/\/ Set up your PayPal credentials\n$apiSecret = 'your_api_secret';\n$merchantId = 'your_merchant_id';\n\n\/\/ Create a PayPal REST API object with your credentials\n$restApi = new Rest($apiSecret, $merchantId);\n\ntry {\n    \/\/ Get your account information using the PayPal API\n    $accountInfoResponse = $restApi-&gt;getAccountInfo();\n    print_r($accountInfoResponse);\n\n} catch (Exception $e) {\n    \/\/ Handle any errors that may occur during API calls\n    echo $e-&gt;getMessage();\n}\n\n\/\/ Generate a new order ID for testing purposes\n$orderID = uniqid('order_');\n\n\/\/ Create a new PayPal payment request\n$paypalPaymentRequest = new PaypalPaymentRequest(\n    $accountInfoResponse['invoice']['invoiceNumber'],\n    $orderID,\n    'Your Payment Method',\n    'Your Merchant ID'\n);\n\n\/\/ Pass the payment request to the handler class\n$handlerClass = 'YourPaymentHandlerClassName';\n$classInstance = new $handlerClass($paypalPaymentRequest);\n\n\/\/ Process the payment and update the order status\n$classInstance-&gt;process();\n\n\/\/ Generate an updated order status\n$classInstance-&gt;generateOrderStatus();<\/code><\/pre>\n<p>&#36890;&#36807;&#36981;&#24490;&#20197;&#19978;&#27493;&#39588;&#65292;&#24744;&#24212;&#35813;&#33021;&#22815;&#22312;&#24744;&#30340;Symfony&#24212;&#29992;&#20013;&#25104;&#21151;&#38598;&#25104;PayPal&#25903;&#20184;&#21151;&#33021;&#12290;&#35831;&#27880;&#24847;&#65292;&#23454;&#38469;&#37096;&#32626;&#26102;&#24212;&#32771;&#34385;&#23433;&#20840;&#24615;&#38382;&#39064;&#65292;&#30830;&#20445;&#25968;&#25454;&#20256;&#36755;&#23433;&#20840;&#19988;&#31526;&#21512;&#25152;&#26377;&#30456;&#20851;&#30340;&#27861;&#24459;&#27861;&#35268;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#23558;PayPal&#25903;&#20184;&#19982;Symfony&#38598;&#25104;&#26159;&#19968;&#20010;&#30456;&#23545;&#31616;&#21333;&#30340;&#038;#36807..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1119","my1js","type-my1js","status-publish","hentry","my1js2nav-symfony"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/1119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=1119"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1119"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1119"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}