Zencart は注文を作成して支払います。これは、Zencart のバックエンドで注文価格を変更するのと似ています。
Zencart は最初に注文を生成してから支払います。注文価格を変更する淘宝バックエンドと同様に、Zencart は注文を生成します
Zencart は Paypal を使用して支払いを行います。注文漏れが発生します。つまり、Paypal が顧客の支払いを受け取りました。しかし、Web サイトのバックエンドでは顧客からの注文はありません。 Paypal で注文が届かない主な理由は、顧客が Paypal の Web サイトにジャンプして支払いを完了したときに、ウィンドウを直接閉じたり、ネットワークが不安定で Web サイトに正常にジャンプしないことです。
Paypal での注文漏れの問題を解決するには、いくつかの解決策があります:
1. カート内の詳細項目オプションをオンにします。
原則: zencart バックエンド モジュールで [カートの詳細項目] オプションを開きます --> 支払い --> PayPal ウェブサイト支払い標準 - IPN。このオプションでは、すべての注文商品情報が PayPal に転送され、顧客が正常に支払ったものの、バックエンドが注文を正常に生成できなかった場合、PayPal アカウントの取引情報を通じて顧客がどの商品を購入したかを確認することもできます。
if ( (zen_not_null($module)) && (in_array($module.'.php', $this->modules)) && (isset($GLOBALS) [$module]->paynow_action_url)) ) {
$this->paynow_action_url = $GLOBALS[$module]->paynow_action_url;
}
paynow_button($order_id) 関数を追加するには、支払いクラスの最後の関数の後に次のコードを追加してください:
リーリー
2. PayPal 支払い方法を例として、その実装方法を説明します。ここで paypal.php ファイルを直接変更します。必ずこのファイルをバックアップしてください。コードは以下のとおりです。ここでは、form_action_url の指定が削除され、paynow_action_url が指定されていることがわかります。これは、ユーザーが「注文の確認」をクリックした後に直接 checkout_process に入ってほしいためです。そのため、form_action_url が指定されていない場合は、注文を確認するためのフォームは checkout_process ページに直接送信され、paynow_action_url は前の form_action_url の値です。 paynow_button 関数の実装も非常に簡単です。ここでは、元の process_button() 関数の内容を切り取っているだけですが、グローバル $order 変数を使用する代わりに、$order = new order($order_id) を使用して再作成します。過去の注文で今すぐ支払うボタンを表示する準備として構築されたオブジェクト。 paypal.phpの変更後のファイルは以下の通りです:

注: これは、PayPal アカウント設定のメインのメール アドレスと 正確に 一致する必要があります。 大文字と小文字が区別されるため、paypal.com で PayPal プロフィール設定を確認し、ここに正確に同じメインのメール アドレスを入力してください。', '6', '2', now())") ; 253 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title、configuration_key、configuration_value、configuration_description、configuration_group_id、sort_order、set_function、date_added) 値 ('トランザクション通貨', 'MODULE_PAYMENT_PAYPAL_CURRENCY) 「、」選択した通貨', '注文を PayPal に送信する通貨はどれですか?
注: サポートされていない通貨を PayPal に送信すると、自動的に USD に変換されます。', '6', '3 ', 'zen_cfg_select_option(array('選択された通貨', 'USDのみ', 'AUDのみ', 'CADのみ', 'EURのみ', 'GBPのみ', 'CHFのみ', 'CZKのみ', 'DKKのみ'、'HKD のみ'、'HUF のみ'、'JPY のみ'、'NOK のみ'、'NZD のみ'、'PLN のみ'、'SEK のみ'、'SGD のみ'、'THB のみ'、'MXN のみ', 'ILSのみ', 'PHPのみ', 'TWDのみ', 'BRLのみ', 'MYRのみ'), ', now())"); 254 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title,configuration_key,configuration_value,configuration_description,configuration_group_id,sort_order,use_function,set_function,date_added)values('Payment Zone', 'MODULE_PAYMENT_PAYPAL_Z)ワン」 , '0', 'ゾーンが選択されている場合は、そのゾーンに対してのみこの支払い方法を有効にします。', '6', '4', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', now())"); 255 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title,configuration_key,configuration_value,configuration_description,configuration_group_id,sort_order,set_function,use_function,date_added)values('保留通知ステータスの設定', ' MODULE_PAYMENT_PAYPAL_PROCESSING_STATUS_ID', '" . DEFAULT_ORDERS_STATUS_ID . "', 'この支払いモジュールで行われた、まだ完了していない注文のステータスをこの値に設定します
(「保留中」を推奨)', '6', '5' , 'zen_cfg_pull_down_order_statuses(', 'zen_get_order_status_name', now())"); 256 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title、configuration_key、configuration_value、configuration_description、configuration_group_id、sort_order、set_function、use_function、date_added) 値 ('注文ステータスの設定'、'MODULE_PAYMENT_PAYPAL_ORDER) _STATUS_ID ', '2', '支払いが完了したこの支払いモジュールでの注文のステータスをこの値に設定します
('処理中'を推奨)', '6', '6', 'zen_cfg_pull_down_order_statuses(', 'zen_get_order_status_name'、now())"); 257 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title,configuration_key,configuration_value,configuration_description,configuration_group_id,sort_order,set_function,use_function,date_added)values('Set Refund Order Status', ' MODULE_PAYMENT_PAYPAL_REFUND_ORDER_STATUS_ID', '1', 'この支払いモジュールで返金された注文のステータスをこの値に設定します
(「保留中」を推奨)', '6', '7', 'zen_cfg_pull_down_order_statuses(' 、'zen_get_order_status_name'、now())"); 258$db-> execute( "inserting"。table_configuration。 "(configuration_title、configuration_key、configuration_description、configuration_group_id、sort_order、date_added)values( 'sort of displa '0', '表示のソート順序は低いものが最初に表示されます。', '6', '8', now())"); 259 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title,configuration_key,configuration_value,configuration_description,configuration_group_id,sort_order,set_function,date_added)values('Address Override', 'MODULE_PAYMENT_PAYPAL_ADDRESS_OVERRIDE', '1', '1 に設定した場合) 、Zen Cart で選択された顧客の配送先住所は、PayPal に保存されている顧客のアドレス帳を上書きします。顧客には Zen Cart から住所が表示されますが、PayPal で編集することはできません。
(無効な住所です。) PayPal では提供されていないものとして扱われます。または、override=0)
0=上書きなし
1=ZC アドレスは PayPal アドレスの選択を上書きします', '6', '18', 'zen_cfg_select_option (array('0','1'), ', now())"); 260 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title、configuration_key、configuration_value、configuration_description、configuration_group_id、sort_order、set_function、date_added) 値 ('配送先住所の要件?'、'MODULE_PAYMENT_PAYPAL_ADDRESS) _必須' , '2', '購入者の配送先住所。0 に設定すると、顧客は配送先住所を入力するよう求められます。2 に設定すると、顧客は配送先住所を入力する必要があります。
0=確認する
1=質問されません
2=必須
注:顧客が独自の配送先住所を入力できるようにしてから、注文を処理するときに PayPal 確認の詳細を手動で確認して、適切な住所を確認してください。 Web ペイメント スタンダード (IPN) を使用する場合、Zen Cart は顧客が別の住所を選択したかどうかを認識しません。 PayPal での配送先住所と注文時に入力した配送先住所の比較。', '6', '20', 'zen_cfg_select_option(array('0','1','2'), ', now( ))"); 261 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title、configuration_key、configuration_value、configuration_description、configuration_group_id、sort_order、set_function、date_added) 値 ('カート内の詳細な項目', 'MODULE_PAYMENT_PAYPAL_DE) TAILED_CART '、'いいえ'、'PayPal に品目の詳細を提供しますか? True に設定すると、割引が適用されず、税金と送料が単純な場合、品目の詳細が PayPal と共有されます。それ以外の場合は、カートの集計が行われます。 ', '6', '22', 'zen_cfg_select_option(array('No','Yes'), ', now())"); 262 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title,configuration_key,configuration_value,configuration_description,configuration_group_id,sort_order,date_added)values('Page Style', 'MODULE_PAYMENT_PAYPAL_PAGE_STYLE',アリ」 , '支払いページのカスタム支払いページ スタイルを設定します。page_style の値は、ページ スタイルを追加または編集するときに選択したページ スタイル名と同じです。[マイ] の [プロファイル] サブタブからカスタム支払いページ スタイルを追加および編集できます。 PayPal サイトの [アカウント] タブ。常にプライマリ スタイルを参照したい場合は、これを「プライマリ」に設定します。デフォルトの PayPal ページ スタイルを参照したい場合は、これを「paypal」に設定します。', '6', '25'、今())"); 263 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title,configuration_key,configuration_value,configuration_description,configuration_group_id,sort_order,set_function,date_added)values('PayPal Web サービスのモード
デフォルト:
www.paypal.com/cgi-bin/webscr
または
www.paypal.com/us/cgi-bin/webscr
または英国の場合、
www.paypal.com/uk/cgi-bin/ webscr
', 'MODULE_PAYMENT_PAYPAL_HANDLER', 'www.paypal.com/cgi-bin/webscr', 'PayPal ライブ処理用の URL を選択してください', '6', '73', '', now()) ");
264 // サンドボックス: www.sandbox.paypal.com/cgi-bin/webscr
265 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title,configuration_key,configuration_value,configuration_description,configuration_group_id,sort_order,date_added,use_function)values('PDT トークン (支払いデータ転送)', ' MODULE_PAYMENT_PAYPAL_PDTTOKEN', '', '処理後すぐにトランザクションをアクティブ化するには (検証に合格した場合)、PDT トークンの値をここに入力してください。', '6', '25', now(), 'zen_cfg_password_display')");
266 // Paypalのテストオプションはこちら
267 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title,configuration_key,configuration_value,configuration_description,configuration_group_id,sort_order,set_function,date_added)values('Debug Mode', 'MODULE_PAYMENT_PAYPAL_IPN_DEBUG', 'Off', 'デバッグログを有効にしますか? 注: これにより、メールの受信トレイが非常に乱雑になる可能性があります!
ログは /includes/modules/payment/paypal/logs フォルダに保存されます
メールはストア所有者のアドレスに送信されます.
電子メール オプションは推奨されません。
通常の操作ではオフのままにしておきます。', '6', '71', 'zen_cfg_select_option(array('Off ','ログ ファイル','ログとメール'), ',now())"); 268 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title、configuration_key、configuration_value、configuration_description、configuration_group_id、sort_order、date_added) 値 ('デバッグ電子メール アドレス'、'MODULE_PAYMENT_PAYPAL_DEBUG_EMAIL_住所「、」 .STORE_OWNER_EMAIL_ADDRESS."', 'PayPal のデバッグに使用するメール アドレス', '6', '72', now())"); 269 270 $this->notify('NOTIFY_PAYMENT_PAYPAL_INSTALLED'); 271 } 272 /** 273 * モジュールとそのすべての設定を削除します 274 * 275 */ 276 関数 Remove() { 277 グローバル $db; 278 $db->Execute("delete from " . TABLE_CONFIGURATION . " whereconfiguration_key LIKE 'MODULE_PAYMENT_PAYPAL_%'"); 279 $this->notify('NOTIFY_PAYMENT_PAYPAL_UNINSTALLED'); 280 } 281 /** 282 * モジュールの構成に使用される構成キーの内部リスト 283 * 284 * @return 配列 285 */ 286 関数キー() { 287 $keys_list = 配列( 288 'MODULE_PAYMENT_PAYPAL_STATUS', 289 'MODULE_PAYMENT_PAYPAL_BUSINESS_ID', 290 'MODULE_PAYMENT_PAYPAL_PDTTOKEN', 291 'MODULE_PAYMENT_PAYPAL_CURRENCY', 292 'MODULE_PAYMENT_PAYPAL_ZONE', 293 'MODULE_PAYMENT_PAYPAL_PROCESSING_STATUS_ID', 294 'MODULE_PAYMENT_PAYPAL_ORDER_STATUS_ID', 295 'MODULE_PAYMENT_PAYPAL_REFUND_ORDER_STATUS_ID', 296 'MODULE_PAYMENT_PAYPAL_SORT_ORDER', 297 'MODULE_PAYMENT_PAYPAL_DETAILED_CART', 298 'MODULE_PAYMENT_PAYPAL_ADDRESS_OVERRIDE' , 299 'MODULE_PAYMENT_PAYPAL_ADDRESS_REQUIRED' , 300 'MODULE_PAYMENT_PAYPAL_PAGE_STYLE' 、 301 'MODULE_PAYMENT_PAYPAL_HANDLER', 302 'MODULE_PAYMENT_PAYPAL_IPN_DEBUG', 303 ); 304 305 // Paypalのテスト/デバッグオプションはここにあります: 306 if (IS_ADMIN_FLAG === true) { 307 if (isset($_GET['debug']) && $_GET['debug']=='on') { 308 $keys_list[]='MODULE_PAYMENT_PAYPAL_DEBUG_EMAIL_ADDRESS'; /* デフォルトはストア所有者のメールアドレス */ 309 } 310 } 311 戻る $keys_list; 312 }313 314 function _getPDTresults($orderAmount, $my_currency, $pdtTX) { 315 グローバル $db; 316 $ipnData = ipn_postback('PDT', $pdtTX); 317 $respdata = $ipnData['info']; 318 319 // データを解析する 320 $lines = explode("n", $respdata); 321 $this->pdtData = array(); 322 for ($i=1; $icount($lines);$i++){ 323 if (!strstr($lines[$i], "=")) 続ける; 324 list($key,$val) = explode("=", $lines[$i]); 325 $this->pdtData[urldecode($key)] = urldecode($val); 326 } 327 328 if ($this->pdtData['txn_id'] == '' || $this->pdtData['payment_status'] == '') { 329 ipn_debug_email('PDT が無効なデータを返しました。代わりに IPN が処理するまで待つ必要があります。' . "n" . print_r($this->pdtData, true)); 330 戻る FALSE; 331 } else { 332 ipn_debug_email('PDT 返されたデータ ' . print_r($this->pdtData, true)); 333 } 334 335 $_POST['mc_gross'] = $this->pdtData['mc_gross']; 336 $_POST['mc_currency'] = $this->pdtData['mc_currency']; 337 $_POST['ビジネス'] = $this->pdtData['ビジネス']; 338 $_POST['receiver_email'] = $this->pdtData['receiver_email']; 339 340 $PDTstatus = (ipn_validate_transaction($respdata, $this->pdtData, 'PDT') && valid_payment($orderAmount, $my_currency, 'PDT') && $これ->pdtData['payment_status'] == '完了'); 341 if ($this->pdtData['payment_status'] != '' && $this->pdtData['payment_status'] != 'Completed') { 342 ipn_debug_email('PDT 警告 :: 注文は「完了」としてマークされていません。保留中の理由を確認するか、IPN が完了するまでお待ちください。' . "n" . '[payment_status] => ' . $this- >pdtData['payment_status'] . '[pending_reason] => $this->pdtData['pending_reason']); 343 } 344 345 $sql = "SELECT order_id、paypal_ipn_id、payment_status、txn_type、pending_reason 346「 . TABLE_PAYPAL . 」から 347 WHERE txn_id = :transactionID またはparent_txn_id = :transactionID 348 order_id DESC で注文 "; 349 $sql = $db->bindVars($sql, ':transactionID', $this->pdtData['txn_id'], 'string'); 350 $ipn_id = $db->Execute($sql); 351 if ($ipn_id->RecordCount() != 0) { 352 ipn_debug_email('PDT 警告 :: トランザクションはすでに存在します。おそらく IPN がすでに追加しています。PDT 処理は終了しました。'); 353 $pdtTXN_is_unique = false; 354 } else { 355 $pdtTXN_is_unique = true; 356 } 357 358 $PDTstatus = ($pdtTXN_is_unique && $PDTstatus); 359 360 戻る $PDTステータス; 361 }362 363 364 関数 tableCheckup() { 365 グローバル $db、$スニファー; 366 $field大丈夫1 = (method_exists($sniffer, 'field_type')) ? $sniffer->field_type(TABLE_PAYPAL, 'txn_id', 'varchar(20)', true) : -1; 367 $field大丈夫2 = ($sniffer->field_exists(TABLE_PAYPAL, 'module_name')) ? 本当 : -1; 368 $field大丈夫3 = ($sniffer->field_exists(TABLE_PAYPAL, 'order_id')) ? 本当 : -1; 369 370 if ($field大丈夫1 == -1) { 371 $sql = "「 . TABLE_PAYPAL 」のフィールドを表示します。 372 $result = $db->Execute($sql); 373 ながら (!$結果->EOF) { 374 if ($result->fields['フィールド'] == 'txn_id') { 375 if ($result->fields['Type'] == 'varchar(20)') { 376 $field大丈夫1 = true; // が存在し、必要なタイプと一致するため、他の検査にスキップします 377 } else { 378 $fieldHealthy1 = $result->fields['Type']; //は一致しないので、「そのまま」を返します 379 休憩; 380 } 381 } 382 $result->MoveNext(); 383 } 384 }385 386 if ($field大丈夫1 !== true) { 387 // v1.3.7.x のテーブル構造の一時的な修正 -- 後のリリースでは削除される可能性があります 388 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGEpayment_typepayment_type varchar(40) NOT NULL デフォルト ''"); 389 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE txn_type txn_type varchar(40) NOT NULL デフォルト ''"); 390 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGEpayment_statuspayment_status varchar(32) NOT NULL デフォルト ''"); 391 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGEreason_codereason_code varchar(40)defaultNULL"); 392 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE pending_reason pending_reason varchar(32) default NULL"); 393 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE 請求書請求書 varchar(128) デフォルト NULL"); 394 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE payer_business_name payer_business_name varchar(128) デフォルト NULL"); 395 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE address_name address_name varchar(64) default NULL"); 396 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE address_street address_street varchar(254) default NULL"); 397 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE address_city address_city varchar(120) default NULL"); 398 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE address_state address_state varchar(120) デフォルト NULL"); 399 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE payer_email payer_email varchar(128) NOT NULL デフォルト ''"); 400 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE business business varchar(128) NOT NULL default ''"); 401 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGEReceiver_emailreceiver_email varchar(128) NOT NULL デフォルト ''"); 402 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE txn_id txn_id varchar(20) NOT NULL デフォルト ''"); 403 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGEparent_txn_idparent_txn_id varchar(20)defaultNULL"); 404 } 405 if ($field大丈夫2 !== true) { 406 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " ADD COLUMN module_name varchar(40) NOT NULL default '' after txn_type"); 407 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " ADD COLUMN module_mode varchar(40) NOT NULL default '' after module_name"); 408 } 409 if ($field大丈夫3 !== true) { 410 $db->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE zen_order_id order_id int(11) NOT NULL デフォルト '0'"); 411 } 412 }413 414 関数 paynow_button($order_id) { 415 グローバル $db、$order、$currency、$currency; 416 require_once(DIR_WS_CLASSES . 'order.php'); 417 $order = 新しい order($order_id); 418 $options = array(); 419 $optionsCore = array(); 420 $optionsPhone = array(); 421 $optionsShip = array(); 422 $optionsLineItems = array(); 423 $optionsAggregate = array(); 424 $optionsTrans = array(); 425 $buttonArray = array(); 426 427 $this->totalsum = $order->info['total']; 428 429 // PayPal がセッションを失った場合に備えて、セッション内容を永久に保存します 430 $_SESSION['pipn_key_to_remove'] = session_id(); 431 $db->Execute("delete from " . TABLE_PAYPAL_SESSION . " where session_id = '" . zen_db_input($_SESSION['pipn_key_to_remove']) . "'"); 432 433 $sql = "に挿入" 。 TABLE_PAYPAL_SESSION 。 " (session_id、saved_session、expiry) 値 ( 434 '" .zen_db_input($_SESSION['pipn_key_to_remove']) . "', 435 '" . base64_encode(serialize($_SESSION)) . "', 436 '" . (時間() + (1*60*60*24*2)) . "')"; 437 438 $db->Execute($sql); 439 440 $my_currency = select_pp_currency(); 441 if(!空($order->情報['通貨'])){ 442 $my_currency=$order->info['通貨']; 443 } 444 $this->transaction_currency = $my_currency; 445 446 $this->transaction_amount = ($this->totalsum * $currency->get_value($my_currency)); 447 448 $telephone = preg_replace('/D/', '', $order->customer['telephone']); 449 if ($電話 != '') { 450 $optionsPhone['H_PhoneNumber'] = $telephone; 451 if (in_array($order->顧客['country']['iso_code_2'], array('US','CA'))) { 452 $optionsPhone['night_phone_a'] = substr($telephone,0,3); 453 $optionsPhone['night_phone_b'] = substr($telephone,3,3); 454 $optionsPhone['night_phone_c'] = substr($telephone,6,4); 455 $optionsPhone['day_phone_a'] = substr($telephone,0,3); 456 $optionsPhone['day_phone_b'] = substr($telephone,3,3); 457 $optionsPhone['day_phone_c'] = substr($telephone,6,4); 458 } else { 459 $オプション電話['night_phone_b'] = $電話; 460 $optionsPhone['day_phone_b'] = $telephone; 461 } 462 }463 464 $optionsCore = 配列( 465 'lc' =>私たち、 466 //'lc' => $order->顧客['国']['iso_code_2'], 467 '文字セット' =>文字コード、 468 'page_style' => MODULE_PAYMENT_PAYPAL_PAGE_STYLE、 469 'カスタム' => zen_session_name() 。 '=' 。 zen_session_id()、 470 '請求書' => $order->情報['num']、 471 'ビジネス' => MODULE_PAYMENT_PAYPAL_BUSINESS_ID、 472 '戻る' => zen_href_link(FILENAME_CHECKOUT_PROCESS, 'referer=paypal', 'SSL'), 473 'cancel_return' => zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'), 474 'ショッピング URL' => zen_href_link(FILENAME_SHOPPING_CART, '', 'SSL'), 475 'notify_url' => zen_href_link('ipn_main_handler.php', '', 'SSL',false,false,true), 476 'redirect_cmd' => '_xclick','rm' => 2,'bn' => 'zencart','mrb' => 'R-6C7952342H795591R','pal' => '9E82WJBKKGPLQ', 477 ); 478 $optionsCust = 配列( 479 '名' => replace_accents($order->顧客['名']), 480 '姓' => replace_accents($order->顧客['姓']), 481 'アドレス1' => replace_accents($order->顧客['番地']), 482 '都市' => replace_accents($order->customer['city']), 483 '状態' => zen_get_zone_code($order->顧客['country']['id'], $order->顧客['zone_id'], $order->顧客['state']), 484 'zip' => $order->顧客['郵便番号']、 485 '国' => $order->顧客['国']['iso_code_2'], 486 'メール' => $order->顧客['email_address'], 487 ); 488 // 住所 2 行目はオプションです 489 if ($order->顧客['郊外'] != '') $optionsCust['住所2'] = $order->顧客['郊外']; 490 // 日本語の住所レイアウトの異なる形式: 491 if ($order->customer['country']['iso_code_2'] == 'JP') $optionsCust['zip'] = substr($order- >顧客['郵便番号'], 0, 3) 。 「-」。 substr($order->顧客['郵便番号'], 3); 492 if (MODULE_PAYMENT_PAYPAL_ADDRESS_REQUIRED == 2) { 493 $optionsCust = 配列( 494 '名' => replace_accents($order->delivery['firstname'] != '' ? $order->delivery['firstname'] : $order->billing['firstname']), 495 '姓' => replace_accents($order->delivery['lastname'] != '' ? $order->delivery['lastname'] : $order->billing['lastname']), 496 'アドレス1' => replace_accents($order->delivery['street_address'] != '' ? $order->delivery['street_address'] : $order->billing['street_address']), 497 '都市' => replace_accents($order->delivery['city'] != '' ? $order->delivery['city'] : $order->billing['city']), 498 '状態' => ($order->delivery['country']['id'] != '' ? zen_get_zone_code($order->delivery['country']['id'], $order- >delivery['zone_id'], $order->delivery['state']) : zen_get_zone_code($order->billing['country']['id'], $order- >billing['zone_id'], $order->billing['state'])), 499 'zip' => ($order->delivery['郵便番号'] != '' ? $order->delivery['郵便番号'] : $order->billing['postcode']), 500 '国' => ($注文->配送['国']['タイトル'] != '' ? $order->配送['country']['title'] : $order->billing['country']['title'])、 501 '国コード' => ($order->delivery['country']['iso_code_2'] != '' ? $order->delivery['country']['iso_code_2'] : $order->請求['国']['iso_code_2'])、 502 'メール' => $order->顧客['email_address'], 503 ); 504 if ($order->delivery['郊外'] != '') $optionsCust['address2'] = $order->delivery['郊外'] ; 505 if ($order->delivery['country']['iso_code_2'] == 'JP') $optionsCust['zip'] = substr($order) ->配達['郵便番号']、0、3) 。 「-」。 substr($order->delivery['郵便番号'], 3); 506 } 507 $optionsShip['no_shipping'] = MODULE_PAYMENT_PAYPAL_ADDRESS_REQUIRED; 508 if (MODULE_PAYMENT_PAYPAL_ADDRESS_OVERRIDE == '1') $optionsShip['address_override'] = MODULE_PAYMENT_PAYPAL_ADDRESS_OVERRIDE; 509 // 可能な場合はカートの内容の詳細を準備してください 510 if (MODULE_PAYMENT_PAYPAL_DETAILED_CART == 'はい') $optionsLineItems = ipn_getLineItemDetails(); 511 if (sizeof($optionsLineItems) > 0) { 512 $optionsLineItems['cmd'] = '_cart'; 513 // $optionsLineItems['num_cart_items'] = sizeof($order->products); 514 if (isset($optionsLineItems['shipping'])) { 515 $optionsLineItems['shipping_1'] = $optionsLineItems['shipping']; 516 unset($optionsLineItems['shipping']); 517 } 518 unset($optionsLineItems['小計']); 519 // 計算の不一致や割引などにより品目の詳細を保持できなかった場合、デフォルトで集計モードになります 520 if (!isset($optionsLineItems['item_name_1']) || $optionsLineItems['creditsExist'] == TRUE) $optionsLineItems =レイ() ; 521 //if ($optionsLineItems['amount'] != $this->transaction_amount) $optionsLineItems = array(); 522 // デバッグ: 523 //ipn_debug_email('品目の詳細 (空白の場合、データの不一致またはクレジットが適用されたためバイパスされたことを意味します): ' . "n" . print_r($optionsLineItems, true)); 524 unset($optionsLineItems['creditsExist']); 525 }526 $optionsAggregate = array( 527 'cmd' => '_ext-enter', 528 'アイテム名' => MODULE_PAYMENT_PAYPAL_PURCHASE_DESCRIPTION_TITLE、 529 'アイテム番号' => MODULE_PAYMENT_PAYPAL_PURCHASE_DESCRIPTION_ITEMNUM、 530 //'num_cart_items' => sizeof($order->products), 531 '金額' => number_format($this->transaction_amount, $currency->get_Decimal_places($my_currency)), 532 '配送' => 「0.00」、 533 ); 534 if (MODULE_PAYMENT_PAYPAL_TAX_OVERRIDE == 'true') $optionsAggregate['tax'] = '0.00'; 535 if (MODULE_PAYMENT_PAYPAL_TAX_OVERRIDE == 'true') $optionsAggregate['tax_cart'] = '0.00'; 536 $optionsTrans = array( 537 'アップロード' => (int)(sizeof($order->商品) > 0), 538 '通貨コード' => $my_currency、 539 //'paypal_order_id' => $paypal_order_id、 540 //'no_note' => 「1」、 541 //'請求書' => ”、 542 ); 543 544 // 項目情報が無効な場合は、aggregate:を使用します 545 if (sizeof($optionsLineItems) > 0) $optionsAggregate = $optionsLineItems; 546 547 //提出物を準備します 548 $options = array_merge($optionsCore, $optionsCust, $optionsPhone, $optionsShip, $optionsTrans$,オプション集約); 549 //ipn_debug_email('送信用のキー: ' .print_r($options, true)); 550 551 // ボタンフィールドを構築します 552 foreach ($options as $name => $value) { 553 //引用符を削除してください 554 $value = str_replace('"', '', $value); 555 //無効な文字をチェック 556 if (preg_match('/[^a-zA-Z_0-9]/', $name)) { 557 ipn_debug_email('datacheck - ABORTING - preg_match で無効な送信キーが見つかりました: ' . $name . ' (' . $value . ')'); 558 休憩; 559 } 560 // & および = 記号には特別な処理が必要ですか? 561 //if (strpos($value, '&') !== false || strpos($value, '=') !== false) $value = urlencode($value); 562 563 $buttonArray[] = zen_draw_hidden_field($name, $value); 564 } 565 $process_button_string = implode("n", $buttonArray) 。 「ん」; 566 567 $_SESSION['paypal_transaction_info'] = array($this->transaction_amount, $this->transaction_currency); 568 return $process_button_string; 569 } 570 571 } コードを表示
3. その後、Order.php 内の作成メソッドを変更し、注文を作成するときに、顧客が選択する支払い方法が Paypal であることを指定します。契約の状態は未払いになる可能性があります。
<span> 1</span> <span>関数</span> create(<span>$zf_ot_modules</span>, <span>$zf_mode</span> = 2<span>) { </span><span> 2</span> <span>グローバル</span> <span>$db</span><span>; </span><span> 3</span> <span>$t1</span> = <span>日付</span>("YmdGhs"<span>); </span><span> 4</span> <span>srand</span> ((<span>float</span>) <span>microtime</span>() * 10000000<span>); </span><span> 5</span> <span>$input</span> = <span>array</span> ("1", "2", "3", "4", "5", "6", "7", "8", "9", " 0"<span>); </span><span> 6</span> <span>$rand_keys</span> = <span>array_rand</span> (<span>$input</span>, 2<span>); </span><span> 7</span> <span>$l1</span> = <span>$input</span>[<span>$rand_keys</span>[0<span>]]; </span><span> 8</span> <span>$l2</span> = <span>$input</span>[<span>$rand_keys</span>[1<span>]]; </span><span> 9</span> <span>$r1</span> = <span>rand</span>(0,9<span>); </span><span>10</span> <span>$ordernum</span> = <span>$t1</span>.<span>$l1</span>.<span>$l2</span>.<span>$r1</span><span>; </span><span>11</span> <span>12</span> <span>if</span> (<span>$this</span>->info['total'] == 0<span>) { </span><span>13</span> <span>if</span> (DEFAULT_ZERO_BALANCE_ORDERS_STATUS_ID == 0<span>) { </span><span>14</span>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。
