ホームページ >バックエンド開発 >PHPチュートリアル >Zencart は注文後に支払いを行います。これは、注文価格を変更できる Taobao バックエンドと同様です。
Zencart が支払いに Paypal を使用すると、注文の欠落が発生します。つまり、Paypal は顧客の支払いを受け取りましたが、ウェブサイトのバックエンドには顧客からの注文がありません。 Paypal で注文が届かない主な理由は、顧客が Paypal の Web サイトにジャンプして支払いを完了したときに、ウィンドウを直接閉じたり、ネットワークが不安定で Web サイトに正常にジャンプしないことです。
Paypal での注文漏れの問題を解決するには、いくつかの解決策があります:
1. カートの詳細項目オプションをオンにします。
原則: zencart バックエンド モジュールで [カートの詳細項目] オプションを開きます --> PayPal ウェブサイト支払い標準 - IPN。このオプションでは、すべての注文商品情報が PayPal に転送され、顧客が正常に支払ったものの、バックエンドが注文を正常に生成できなかった場合、PayPal アカウントの取引情報を通じて顧客がどの商品を購入したかを確認することもできます。
2. Paypal セッション ビューアー プラグインを使用して、Paypal が見逃した注文を取得します。
原則: zencart ショッピング カート内の商品が Paypal を通じて支払われた場合、支払いが成功し、注文が PayPal Web サイトからショッピング Web サイトにジャンプすると、支払いのすべての記録が paypal_session テーブルに保存されます。注文が生成されると、zencart システムはこの paypal_session レコードを自動的に削除します。ショッピング Web サイトに正常にジャンプせず、注文も正常に生成されなかった場合、Paypal を使用するときにこの支払い記録データは常にデータベースに保存されます。 Session Viewer プラグインを使用すると、顧客情報、買い物時間、製品情報などのすべてのデータを表示でき、この paypal_session 情報を注文に転送して生成できます。注文。
プラグインのダウンロードアドレス: http://www.zen-cart.cn/english-version-modules/admin-tools/paypal-sessions-viewer
3. 支払いプロセスを変更します。注文してから支払います。
原則: zen-cartを利用したことがある人なら、zen-cartでの注文手順は次のとおりであることを知っています([]内の表現は不要です):
1.ショッピングカート
2. [配送方法]
3. 支払い方法
4. 注文の確認(確認)
5. [第三者ウェブサイトでの支払い]
6. 注文処理(チェックアウトプロセス)—— このステップは、ショッピングカート内の情報が反映されるため、重要です。ここに注文に書き込まれます
7. 注文が成功しました(チェックアウト成功)
通常の状況では、このプロセスに問題はありません。ただし、ステップ 5 からステップ 6 までのプロセスでは、ユーザーが支払いが成功したと考えて Web ページを直接閉じたり、ネットワーク上の理由によりユーザーが正常に checkout_process ページにジャンプできない可能性があります。注文を正常に作成できないため、これは非常に深刻です。上記の分析に基づいて、私たちはプロセスを少し変更することを望んでいます。つまり、支払いの前に注文が作成されるようにして、支払いがサードパーティの支払い Web サイトからジャンプバックできない場合でも、ユーザーに支払いを行わせないようにしたいと考えています。正常に完了しましたが、バックグラウンドでの注文ステータスにエラーは発生しません。
注文漏れを防ぐために Zen-cart の注文と支払いプロセスを変更するという Dongguo 氏のチュートリアルに従いました。このチュートリアルは比較的古く、あまり包括的ではないため、実際のニーズに基づいて修正しました。 。
変更されたブループリントは基本的に次のとおりです:
1. checkour_confirmation ページで注文を確認した後、直接処理して account_history_info ページに入り、そこで支払いページに入ることができます。下の図に示すように:
2. 顧客がその時点で支払いを怠った場合は、独自のバックエンドにアクセスして過去の注文の支払いを行うこともできます。下の図に示すように:
3. 未払いの注文の場合は、淘宝網と同じように、商品の写真を撮った後、支払い前にストアのオーナーが価格を変更できます。 。以下の図に示すように:
まず、変更するすべてのファイルをリストします:
1. include/modules/payment/ paypal.php
3. include/classes/order.php
4. include/modules/pages/header_php.php
6. templates/ テンプレート ディレクトリ/templates/tpl_account_history_default.php
7. include/templates/テンプレート ディレクトリ/tpl_account_history_default.php
8. ipn_main_handler.php
9.
最初に注文を作成してから支払いを行うため、支払いプロセスを簡素化するために、これをインストールする前に Fast And Easy Checkout For Zencart (高速支払い) プラグインをインストールしました。このプラグインをインストールするには、高速支払いプラグインの依存プラグインである別のプラグイン Css Js Loader For Zencart をインストールする必要があります。クイック決済と注文後の支払いには因果関係がありませんので、インストールしたくない場合は無視して大丈夫です。
上記のファイルを変更するには、次の手順を実行します。
1. まず、既存の支払いモジュールを変換する必要があります。支払い用のページ URL を表すフィールド paynow_action_url を支払いメソッド クラスに追加する必要があります。さらに、支払いフォームのパラメータ隠しフィールド コードを取得するために関数 paynow_button($order_id) を追加する必要があります。
paynow_action_url 変数を追加するには、支払いクラスのコンストラクターの最後に次のコードを追加してください:
<span>if</span> ( (zen_not_null(<span>$module</span>)) && (<span>in_array</span>(<span>$module</span>.'.php', <span>$this</span>->modules)) && (<span>isset</span>(<span>$GLOBALS</span>[<span>$module</span>]-><span>paynow_action_url)) ) { </span><span>$this</span>->paynow_action_url = <span>$GLOBALS</span>[<span>$module</span>]-><span>paynow_action_url; }</span>
paynow_button ($order_id) 関数を追加するには、最後の関数の後に次のコードを追加してください。支払いクラス :
<span>function</span> paynow_button(<span>$order_id</span><span>){ </span><span>if</span> (<span>is_array</span>(<span>$this</span>-><span>modules)) { </span><span>if</span> (<span>is_object</span>(<span>$GLOBALS</span>[<span>$this</span>-><span>selected_module])) { </span><span>return</span><span>$GLOBALS</span>[<span>$this</span>->selected_module]->paynow_button(<span>$order_id</span><span>); } } }</span>
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の変更後のファイルは以下の通りです:
<span> 1</span> <?<span>php </span><span> 2</span><span>/*</span><span>* </span><span> 3</span><span> * PayPal Website Payments Standard (IPN) メソッドの paypal.php 支払いモジュール クラス </span><span> 4</span><span> * </span><span> 5</span><span> * @packagepaymentMethod </span><span> 6</span><span> * @copyright Copyright 2003-2010 Zen Cart 開発チーム </span><span> 7</span><span> * @copyright 部分著作権 2003 osCommerce </span><span> 8</span><span> * @license http://www.zen-cart.com/license/2_0.txt GNU パブリック ライセンス V2.0 </span><span> 9</span><span> * @version $Id: paypal.php 15735 2010-03-29 07:13:53Z drbyte $ </span><span> 10</span><span>*/</span><span> 11</span><span> 12</span><span>define</span>('MODULE_PAYMENT_PAYPAL_TAX_OVERRIDE', 'true'<span>); </span><span> 13</span><span> 14</span><span>/*</span><span>* </span><span> 15</span><span> * 依存関係がロードされていることを確認してください </span><span> 16</span><span>*/</span><span> 17</span><span>include_once</span>((IS_ADMIN_FLAG === <span>true</span> ? DIR_FS_CATALOG_MODULES : DIR_WS_MODULES) . 'payment/paypal/paypal_functions.php'<span>); </span><span> 18</span><span> 19</span><span>/*</span><span>* </span><span> 20</span><span> * PayPal Website Payments Standard (IPN) メソッドの paypal.php 支払いモジュール クラス </span><span> 21</span><span> * </span><span> 22</span><span>*/</span><span> 23</span><span>クラス</span>ペイパル<span>拡張</span><span>ベース{ </span><span> 24</span><span>/*</span><span>* </span><span> 25</span><span> * 支払い方法を表す文字列 </span><span> 26</span><span> * </span><span> 27</span><span> * @var 文字列 </span><span> 28</span><span>*/</span><span> 29</span><span>var</span><span>$code</span><span>; </span><span> 30</span><span>/*</span><span>* </span><span> 31</span><span> * $title はこの支払い方法の表示名です </span><span> 32</span><span> * </span><span> 33</span><span> * @var 文字列 </span><span> 34</span><span>*/</span><span> 35</span><span>var</span><span>$title</span><span>; </span><span> 36</span><span>/*</span><span>* </span><span> 37</span><span> * $description はこの支払い方法のソフト名です </span><span> 38</span><span> * </span><span> 39</span><span> * @var 文字列 </span><span> 40</span><span>*/</span><span> 41</span><span>var</span><span>$description</span><span>; </span><span> 42</span><span>/*</span><span>* </span><span> 43</span><span> * $enabled は、このモジュールがカタログに表示されるかどうかを決定します。 </span><span> 44</span><span> * </span><span> 45</span><span> * @var boolean </span><span> 46</span><span>*/</span><span> 47</span><span>var</span><span>$有効</span><span>; </span><span> 48</span><span>/*</span><span>* </span><span> 49</span><span> * コンストラクター </span><span> 50</span><span> * </span><span> 51</span><span> * @param int $paypal_ipn_id </span><span> 52</span><span> * @return paypal </span><span> 53</span><span>*/</span><span> 54</span><span>関数</span> paypal(<span>$paypal_ipn_id</span> = ''<span>) { </span><span> 55</span><span>グローバル</span><span>$order</span>、<span>$messageStack</span><span>; </span><span> 56</span><span>$this</span>->code = 'paypal'<span>; </span><span> 57</span><span>$this</span>->codeVersion = '1.3.9'<span>; </span><span> 58</span><span>if</span> (IS_ADMIN_FLAG === <span>true</span><span>) { </span><span> 59</span><span>$this</span>->title = MODULE_PAYMENT_PAYPAL_TEXT_ADMIN_TITLE; <span>//</span><span> Admin の支払いモジュールのタイトル</span><span> 60</span><span>if</span> (IS_ADMIN_FLAG === <span>true</span> && <span>define</span>('MODULE_PAYMENT_PAYPAL_IPN_DEBUG') && G != 'オフ') <span>$this</span>->タイトル.= ' (デバッグ モードがアクティブ)</span>'<span>; </span><span> 61</span><span>if</span> (IS_ADMIN_FLAG === <span>true</span> && MODULE_PAYMENT_PAYPAL_TESTING == 'テスト') <span>$this</span>->title .= '<span> (開発/テスト モードがアクティブ)</span>'<span>; </span><span> 62</span> } <span>else</span><span> { </span><span> 63</span><span>$this</span>->title = MODULE_PAYMENT_PAYPAL_TEXT_CATALOG_TITLE; <span>//</span><span> カタログ内の支払いモジュールのタイトル</span><span> 64</span><span> }</span><span> 65</span><span>$this</span>->説明 =<span> MODULE_PAYMENT_PAYPAL_TEXT_DESCRIPTION; </span><span> 66</span><span>$this</span>->sort_order =<span> MODULE_PAYMENT_PAYPAL_SORT_ORDER; </span><span> 67</span><span>$this</span>->有効 = ((MODULE_PAYMENT_PAYPAL_STATUS == 'True') ? <span>true</span> : <span>false</span><span>); </span><span> 68</span><span>if</span> ((int)MODULE_PAYMENT_PAYPAL_ORDER_STATUS_ID > 0<span>) { </span><span> 69</span><span>$this</span>->order_status =<span> MODULE_PAYMENT_PAYPAL_ORDER_STATUS_ID; </span><span> 70</span><span> } </span><span> 71</span><span>if</span> (<span>is_object</span>(<span>$order</span>)) <span>$this</span>-><span>update_status(); </span><span> 72</span><span>$this</span>->paynow_action_url = 'https://' .<span> MODULE_PAYMENT_PAYPAL_HANDLER; </span><span> 73</span><span> 74</span><span>if</span> (PROJECT_VERSION_MAJOR != '1' && <span>substr</span>(PROJECT_VERSION_MINOR, 0, 3) != '3.9') <span>$this</span>->有効 = <span>false </span><span>; </span><span> 75</span><span> 76</span><span>//</span><span>テーブル構造を検証</span><span> 77</span><span>if</span> (IS_ADMIN_FLAG === <span>true</span>) <span>$this</span>-><span>tableCheckup(); </span><span> 78</span><span> } </span><span> 79</span><span>/*</span><span>* </span><span> 80</span><span> * ゾーンの一致とフラグ設定を計算して、このモジュールを顧客に表示するかどうかを決定します </span><span> 81</span><span> * </span><span> 82</span><span>*/</span><span> 83</span><span>関数</span><span> update_status() { </span><span> 84</span><span>グローバル</span><span>$order</span>、<span>$db</span><span>; </span><span> 85</span><span> 86</span><span>if</span> ( (<span>$this</span>->有効 == <span>true</span>) && ((int)MODULE_PAYMENT_PAYPAL_ZONE > 0<span>) ) { </span><span> 87</span><span>$check_flag</span> = <span>false</span><span>; </span><span> 88</span><span>$check_query</span> = <span>$db</span>->Execute("selectzone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_PAYPAL_ZONE . "' およびzone_country_id = '" . <span>$注文</span>-> billing['country']['id'] . "' ゾーン ID で注文します<span>); </span><span> 89</span><span>ながら</span> (!<span>$check_query</span>-><span>EOF) { </span><span> 90</span><span>if</span> (<span>$check_query</span>->フィールド['zone_id'] ) { <span> 91</span><span>$check_flag</span> = <span>true</span><span>; </span><span> 92</span><span>休憩</span><span>; </span><span> 93</span> } <span>elseif</span> (<span>$check_query</span>->fields['zone_id'] == <span>$order</span>->billing['zone_id'<span>]) { </span><span> 94</span><span>$check_flag</span> = <span>true</span><span>; </span><span> 95</span><span>休憩</span><span>; </span><span> 96</span><span> } </span><span> 97</span><span>$check_query</span>-><span>MoveNext(); </span><span> 98</span><span> } </span><span> 99</span><span>100</span><span>if</span> (<span>$check_flag</span> == <span>false</span><span>) { </span><span>101</span><span>$this</span>->有効 = <span>false</span><span>; </span><span>102</span><span> } </span><span>103</span><span> } </span><span>104</span><span> } </span><span>105</span><span>/*</span><span>* </span><span>106</span><span> * このモジュールが使用のために選択されている場合にデータ入力のエラーチェックを行う JS 検証 </span><span>107</span><span> * (番号、所有者、および CVV の長さ) </span><span>108</span><span> * </span><span>109</span><span> * @return string </span><span>110</span><span>*/</span><span>111</span><span>function</span><span> javascript_validation() { </span><span>112</span><span>return</span><span>false</span><span>; </span><span>113</span><span> } </span><span>114</span><span>/*</span><span>* </span><span>115</span><span> * チェックアウト支払いページにクレジット カード情報送信フィールド (存在する場合) とともに支払い方法名が表示されます </span><span>116</span><span> * </span><span>117</span><span> * @return 配列 </span><span>118</span><span>*/</span><span>119</span><span>関数</span><span>セレクション() { </span><span>120</span><span>return</span><span>array</span>('id' => <span>$this</span>->コード, <span>121</span> 'モジュール' => MODULE_PAYMENT_PAYPAL_TEXT_CATALOG_LOGO、 <span>122</span> 'アイコン' =><span> MODULE_PAYMENT_PAYPAL_TEXT_CATALOG_LOGO </span><span>123</span><span> ); </span><span>124</span><span> }</span><span>125</span><span>/*</span><span>* </span><span>126</span><span> * 通常、クレジット カードの種類が受け入れられるかどうか、およびクレジット カード番号と有効期限が有効かどうかを評価します。 </span><span>127</span><span> * paypalモジュールは情報を収集していないため、このステップをスキップします。 </span><span>128</span><span> * </span><span>129</span><span> * @return boolean </span><span>130</span><span>*/</span><span>131</span><span>function</span><span> pre_confirmation_check() { </span><span>132</span><span>return</span><span>false</span><span>; </span><span>133</span><span> } </span><span>134</span><span>/*</span><span>* </span><span>135</span><span> * チェックアウト確認ページにクレジットカード情報を表示します </span><span>136</span><span> * PayPal サイトに転送する前に PayPal 用に何も収集されないため、これはスキップされます </span><span>137</span><span> * </span><span>138</span><span> * @return boolean </span><span>139</span><span>*/</span><span>140</span><span>関数</span><span>確認() { </span><span>141</span><span>return</span><span>false</span><span>; </span><span>142</span><span> } </span><span>143</span><span>/*</span><span>* </span><span>144</span><span> * 注文確認画面で「送信」ボタンが押されたときに処理するデータとアクションを構築します。 </span><span>145</span><span> * これにより、処理のためにデータが支払いゲートウェイに送信されます。 </span><span>146</span><span> * (これらはチェックアウト確認ページの非表示フィールドです) </span><span>147</span><span> * </span><span>148</span><span> * @return string </span><span>149</span><span>*/</span><span>150</span><span>function</span><span> process_button() { </span><span>151</span><span>return</span><span>false</span><span>; </span><span>152</span><span> } </span><span>153</span><span>/*</span><span>* </span><span>154</span><span> * PayPal サイトにアクセスするときに使用する言語を決定します </span><span>155</span><span>*/</span><span>156</span><span>function</span><span> getLanguageCode() { </span><span>157</span><span>グローバル</span><span>$order</span><span>; </span><span>158</span><span>$lang_code</span> = ''<span>; </span><span>159</span><span>$orderISO</span> = zen_get_countries(<span>$order</span>->customer['country']['id'], <span>true</span><span>); </span><span>160</span><span>$storeISO</span> = zen_get_countries(STORE_COUNTRY, <span>true</span><span>); </span><span>161</span><span>if</span> (<span>in_array</span>(<span>strtoupper</span>(<span>$orderISO</span>['countries_iso_code_2']), <span>array</span>('US', 'AU', 'DE', 'FR', 'IT' 、'GB'、'ES'、'AT'、'BE'、'CA'、'CH'、'CN'、'NL'、'PL'<span>))) { </span><span>162</span><span>$lang_code</span> = <span>strtoupper</span>(<span>$orderISO</span>['countries_iso_code_2'<span>]); </span><span>163</span> } <span>elseif</span> (<span>in_array</span>(<span>strtoupper</span>(<span>$storeISO</span>['countries_iso_code_2'])), <span>array</span>('US', 'AU', 'DE', 'FR', 'IT '、'GB'、'ES'、'AT'、'BE'、'CA'、'CH'、'CN'、'NL'、'PL'<span>))) { </span><span>164</span><span>$lang_code</span> = <span>strtoupper</span>(<span>$storeISO</span>['countries_iso_code_2'<span>]); </span><span>165</span> } <span>elseif</span> (<span>in_array</span>(<span>strtoupper</span>(<span>$_SESSION</span>['言語コード']), <span>array</span>('EN', 'US', 'AU', 'DE', 'FR '、'IT'、'GB'、'ES'、'AT'、'BE'、'CA'、'CH'、'CN'、'NL'、'PL'<span>))) { </span><span>166</span><span>$lang_code</span> = <span>$_SESSION</span>['言語コード'<span>]; </span><span>167</span><span>if</span> (<span>strtoupper</span>(<span>$lang_code</span>) == 'EN') <span>$lang_code</span> = 'US'<span>; </span><span>168</span><span> } </span><span>169</span><span>//</span><span>return $orderISO['countries_iso_code_2'];</span><span>170</span><span>return</span><span>strtoupper</span>(<span>$lang_code</span><span>); </span><span>171</span><span> } </span><span>172</span><span>/*</span><span>* </span><span>173</span><span> * トランザクション情報を注文に保存し、支払いゲートウェイから返された結果を処理します </span><span>174</span><span>*/</span><span>175</span><span>関数</span><span> before_process() { </span><span>176</span><span>return</span><span>false</span><span>; </span><span>177</span><span> } </span><span>178</span><span>/*</span><span>* </span><span>179</span><span> * リファラーをチェックします </span><span>180</span><span> * </span><span>181</span><span> * @param string $zf_domain </span><span>182</span><span> * @return boolean </span><span>183</span><span>*/</span><span>184</span><span>関数</span> check_referrer(<span>$zf_domain</span><span>) { </span><span>185</span><span>return</span><span>true</span><span>; </span><span>186</span><span> }</span><span>187</span><span>/*</span><span>* </span><span>188</span><span> * 管理ページコンポーネントを構築する </span><span>189</span><span> * </span><span>190</span><span> * @param int $zf_order_id </span><span>191</span><span> * @return string </span><span>192</span><span>*/</span><span>193</span><span>function</span> admin_notification(<span>$zf_order_id</span><span>) { </span><span>194</span><span>グローバル</span><span>$db</span><span>; </span><span>195</span><span>$output</span> = ''<span>; </span><span>196</span><span>$sql</span> = "select * from " . TABLE_PAYPAL 。 " ここで order_id = '" 。 (int)<span>$zf_order_id</span> 。 "' paypal_ipn_id による注文 DESC LIMIT 1"<span>; </span><span>197</span><span>$ipn</span> = <span>$db</span>->Execute(<span>$sql</span><span>); </span><span>198</span><span>if</span> (<span>$ipn</span>->RecordCount() > 0 && <span>file_exists</span>(DIR_FS_CATALOG . DIR_WS_MODULES . 'payment/paypal/paypal_admin_notification.php')) <span>require</span>(DI) R_FS_CATALOG .DIR_WS_MODULES 。 Payment/paypal/paypal_admin_notification.php'<span>); </span><span>199</span><span>return</span><span>$output</span><span>; </span><span>200</span><span> } </span><span>201</span><span>/*</span><span>* </span><span>202</span><span> * 後処理アクティビティ </span><span>203</span><span> * 注文がプロセッサーから返されるとき、PDT が成功した場合、結果が order-status-history に保存され、後続の参照のためにデータが記録されます。 </span><span>204</span><span> * </span><span>205</span><span> * @return boolean </span><span>206</span><span>*/</span><span>207</span><span>関数</span><span> after_process() { </span><span>208</span><span>return</span><span>false</span><span>; </span><span>209</span><span> } </span><span>210</span><span>/*</span><span>* </span><span>211</span><span> * エラーメッセージの詳細を表示するために使用されます </span><span>212</span><span> * </span><span>213</span><span> * @return boolean </span><span>214</span><span>*/</span><span>215</span><span>function</span><span>output_error() { </span><span>216</span><span>return</span><span>false</span><span>; </span><span>217</span><span> } </span><span>218</span><span>/*</span><span>* </span><span>219</span><span> * モジュールがインストールされているかどうかを確認してください </span><span>220</span><span> * </span><span>221</span><span> * @return boolean </span><span>222</span><span>*/</span><span>223</span><span>関数</span><span> check() { </span><span>224</span><span>グローバル</span><span>$db</span><span>; </span><span>225</span><span>if</span> (IS_ADMIN_FLAG === <span>true</span><span>) { </span><span>226</span><span>グローバル</span><span>$スニッファー</span><span>; </span><span>227</span><span>if</span> (<span>$sniffer</span>->field_exists(TABLE_PAYPAL, 'zen_order_id')) <span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE COLUMN zen_order_id order_id int( 11) そうではないNULL デフォルト '0'"<span>); </span><span>228</span><span> } </span><span>229</span><span>if</span> (!<span>isset</span>(<span>$this</span>-><span>_check)) { </span><span>230</span><span>$check_query</span> = <span>$db</span>->Execute("selectconfiguration_value from " . TABLE_CONFIGURATION . " whereconfiguration_key = 'MODULE_PAYMENT_PAYPAL_STATUS'"<span>); </span><span>231</span><span>$this</span>->_check = <span>$check_query</span>-><span>RecordCount(); </span><span>232</span><span> } </span><span>233</span><span>戻る</span><span>$this</span>-><span>_check; </span><span>234</span><span> } </span><span>235</span><span>/*</span><span>* </span><span>236</span><span> * 支払いモジュールとその構成設定をインストールします </span><span>237</span><span> * </span><span>238</span><span>*/</span><span>239</span><span>関数</span><span> install() { </span><span>240</span><span>グローバル</span><span>$db</span>、<span>$messageStack</span><span>; </span><span>241</span><span>if</span> (<span>定義</span>('MODULE_PAYMENT_PAYPAL_STATUS'<span>)) { </span><span>242</span><span>$messageStack</span>->add_session('PayPal ウェブサイト決済標準モジュールはすでにインストールされています。', 'エラー'<span>); </span><span>243</span> zen_redirect(zen_href_link(FILENAME_MODULES, 'set=payment&module=paypal', 'NONSSL'<span>)); </span><span>244</span><span>return</span>「失敗しました」<span>; </span><span>245</span><span> } </span><span>246</span><span>if</span> (<span>定義</span>('MODULE_PAYMENT_PAYPALWPP_STATUS'<span>)) { </span><span>247</span><span>$messageStack</span>->add_session('注: PayPal Express Checkout モジュールはすでにインストールされています。Express がインストールされている場合は、Standard は必要ありません。', 'error'<span>); </span><span>248</span> zen_redirect(zen_href_link(FILENAME_MODULES, 'set=payment&module=paypalwpp', 'NONSSL'<span>)); </span><span>249</span><span>return</span>「失敗しました」<span>; </span><span>250</span><span> }</span><span>251</span><span>$db</span>->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title、configuration_key、configuration_value、configuration_description、configuration_group_id、sort_order、set_function、date_added) 値 ('PayPal モジュールを有効にする', 'MODULE_PAYMENT_PAYPAL_STATUS) '、 'True', 'PayPal 支払いを受け入れますか?', '6', '0', 'zen_cfg_select_option(array('True', 'False'), ', now())"<span>); </span><span>252</span><span>$db</span>->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title、configuration_key、configuration_value、configuration_description、configuration_group_id、sort_order、date_added) 値 ('ビジネス ID'、'MODULE_PAYMENT_PAYPAL_BUSINESS_ID','"。 STORE_OWNER_EMAIL_ADDRESS."', 'PayPal アカウントのメインのメール アドレス。<br />注: これは、PayPal アカウント設定のメインのメール アドレスと <strong> 正確に </strong> 一致する必要があります。 <strong>大文字と小文字が区別されるため、paypal.com で PayPal プロフィール設定を確認し、ここに正確に同じメインのメール アドレスを入力してください。', '6', '2', now())"<span>) ; </span><span>253</span><span>$db</span>->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title,configuration_key,configuration_value,configuration_description,configuration_group_id,sort_order,set_function,date_added)values('トランザクション通貨', 'MODULE_PAYMENT_PAYPAL_CURRENCY' 、」選択した通貨', '注文を PayPal に送信する通貨はどれですか? <br />注: サポートされていない通貨を 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())"<span>); </span><span>254</span><span>$db</span>->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_ZONE) ' , '0', 'ゾーンが選択されている場合は、そのゾーンに対してのみこの支払い方法を有効にします。', '6', '4', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', now())"<span>); </span><span>255</span><span>$db</span>->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 . "', 'この支払いモジュールで行われた、まだ完了していない注文のステータスをこの値に設定します<br />(「保留中」を推奨)', '6', '5' , 'zen_cfg_pull_down_order_statuses(', 'zen_get_order_status_name', now())"<span>); </span><span>256</span><span>$db</span>->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_ORDER_ STATUS_ID ', '2', '支払いが完了したこの支払いモジュールでの注文のステータスをこの値に設定します<br />(「処理中」を推奨)', '6', '6', 'zen_cfg_pull_down_order_statuses(', 'zen_get_order_status_name'、now())"<span>); </span><span>257</span><span>$db</span>->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_REFUND_ORDER_STATUS_ID', '1', 'この支払いモジュールで返金された注文のステータスをこの値に設定します<br />(「保留中」を推奨)', '6', '7', 'zen_cfg_pull_down_order_statuses(' 、'zen_get_order_status_name'、now())"<span>); </span><span>258</span><span>$db</span>->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title,configuration_key,configuration_value,configuration_description,configuration_group_id,sort_order,date_added)values('表示のソート順。', 'MODULE_PAYMENT_PAYPAL_SORT_ORDER', '0', '表示のソート順序は低いものが最初に表示されます。', '6', '8', now())"<span>); </span><span>259</span><span>$db</span>->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 で編集することはできません。<br />(無効な住所です。) PayPal では提供されていないものとして扱われます。または、override=0)<br />0=上書きなし<br />1=ZC アドレスは PayPal アドレスの選択を上書きします', '6', '18', 'zen_cfg_select_option (array('0','1'), ', now())"<span>); </span><span>260</span><span>$db</span>->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 に設定すると、顧客は配送先住所を入力する必要があります。 <br />0=確認する<br />1=質問されません<br />2=必須<br /><br /><strong>注:顧客が独自の配送先住所を入力できるようにしてから、注文を処理するときに PayPal 確認の詳細を手動で確認して、適切な住所を確認してください。 Web ペイメント スタンダード (IPN) を使用する場合、Zen Cart は顧客が別の住所を選択したかどうかを認識しません。 PayPal での配送先住所と注文時に入力した配送先住所の比較。</strong>', '6', '20', 'zen_cfg_select_option(array('0','1','2'), ', now( ))"<span>); </span><span>261</span><span>$db</span>->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_DETA) ILED_CART '、'いいえ'、'PayPal に品目の詳細を提供しますか? True に設定すると、割引が適用されず、税金と送料が単純な場合、品目の詳細が PayPal と共有されます。それ以外の場合は、カートの集計が行われます。 ', '6', '22', 'zen_cfg_select_option(array('No','Yes'), ', now())"<span>); </span><span>262</span><span>$db</span>->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'、今())"<span>); </span><span>263</span><span>$db</span>->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 サービスのモード<br /> ;<br />デフォルト:<br /><code>www.paypal.com/cgi-bin/webscr</code><br />または<br /><code> www.paypal.com/us/cgi-bin/webscr</code><br />または英国の場合、<br /><code>www.paypal.com/uk/cgi-bin/ webscr</code>', 'MODULE_PAYMENT_PAYPAL_HANDLER', 'www.paypal.com/cgi-bin/webscr', 'PayPal ライブ処理用の URL を選択してください', '6', '73', '', now()) "<span>); </span><span>264</span><span>//</span><span>サンドボックス: www.sandbox.paypal.com/cgi-bin/webscr</span><span>265</span><span>$db</span>->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')"<span>); </span><span>266</span><span>//</span><span> Paypalのテストオプションはこちら</span><span>267</span><span>$db</span>->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', 'デバッグログを有効にしますか? <br />注: これにより、メールの受信トレイが非常に乱雑になる可能性があります!<br />ログは /includes/modules/payment/paypal/logs フォルダに保存されます<br />メールはストア所有者のアドレスに送信されます.<br />電子メール オプションは推奨されません。<br /><strong>通常の操作ではオフのままにしておきます。</strong>', '6', '71', 'zen_cfg_select_option(array('Off ','ログ ファイル','ログとメール'), ',now())"<span>); </span><span>268</span><span>$db</span>->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_A)アドレス「、」 .STORE_OWNER_EMAIL_ADDRESS."', 'PayPal のデバッグに使用するメール アドレス', '6', '72', now())"<span>); </span><span>269</span><span>270</span><span>$this</span>->notify('NOTIFY_PAYMENT_PAYPAL_INSTALLED'<span>); </span><span>271</span><span> } </span><span>272</span><span>/*</span><span>* </span><span>273</span><span> * モジュールとそのすべての設定を削除します </span><span>274</span><span> * </span><span>275</span><span>*/</span><span>276</span><span>function</span><span>remove() { </span><span>277</span><span>グローバル</span><span>$db</span><span>; </span><span>278</span><span>$db</span>->Execute("「 . TABLE_CONFIGURATION . " から削除します。ここで、configuration_key LIKE 'MODULE_PAYMENT_PAYPAL_%'」<span>); </span><span>279</span><span>$this</span>->notify('NOTIFY_PAYMENT_PAYPAL_UNINSTALLED'<span>); </span><span>280</span><span> } </span><span>281</span><span>/*</span><span>* </span><span>282</span><span> * モジュールの構成に使用される構成キーの内部リスト </span><span>283</span><span> * </span><span>284</span><span> * @return 配列 </span><span>285</span><span>*/</span><span>286</span><span>関数</span><span>キー() { </span><span>287</span><span>$keys_list</span> = <span>配列</span><span>( </span><span>288</span> 'MODULE_PAYMENT_PAYPAL_STATUS', <span>289</span> 'MODULE_PAYMENT_PAYPAL_BUSINESS_ID', <span>290</span> 'MODULE_PAYMENT_PAYPAL_PDTTOKEN', <span>291</span> 'MODULE_PAYMENT_PAYPAL_CURRENCY', <span>292</span> 'MODULE_PAYMENT_PAYPAL_ZONE', <span>293</span> 'MODULE_PAYMENT_PAYPAL_PROCESSING_STATUS_ID', <span>294</span> 'MODULE_PAYMENT_PAYPAL_ORDER_STATUS_ID', <span>295</span> 'MODULE_PAYMENT_PAYPAL_REFUND_ORDER_STATUS_ID', <span>296</span> 'MODULE_PAYMENT_PAYPAL_SORT_ORDER', <span>297</span> 'MODULE_PAYMENT_PAYPAL_DETAILED_CART', <span>298</span> 'MODULE_PAYMENT_PAYPAL_ADDRESS_OVERRIDE' , <span>299</span> 'MODULE_PAYMENT_PAYPAL_ADDRESS_REQUIRED' , <span>300</span> 'MODULE_PAYMENT_PAYPAL_PAGE_STYLE' 、 <span>301</span> 'MODULE_PAYMENT_PAYPAL_HANDLER', <span>302</span> 'MODULE_PAYMENT_PAYPAL_IPN_DEBUG', <span>303</span><span> ); </span><span>304</span><span>305</span><span>//</span><span> Paypalのテスト/デバッグオプションはここにあります:</span><span>306</span><span>if</span> (IS_ADMIN_FLAG === <span>true</span><span>) { </span><span>307</span><span>if</span> (<span>isset</span>(<span>$_GET</span>['debug']) && <span>$_GET</span>['debug']=='on'<span>) { </span><span>308</span><span>$keys_list</span>[]='MODULE_PAYMENT_PAYPAL_DEBUG_EMAIL_ADDRESS'; <span>/*</span><span> デフォルトはストア所有者のメールアドレス </span><span>*/</span><span>309</span><span> } </span><span>310</span><span> } </span><span>311</span><span>return</span><span>$keys_list</span><span>; </span><span>312</span><span> }</span><span>313</span><span>314</span><span>function</span> _getPDTresults(<span>$orderAmount</span>, <span>$my_currency</span>, <span>$pdtTX</span><span>) { </span><span>315</span><span>グローバル</span><span>$db</span><span>; </span><span>316</span><span>$ipnData</span> = ipn_postback('PDT', <span>$pdtTX</span><span>); </span><span>317</span><span>$respdata</span> = <span>$ipnData</span>['info'<span>]; </span><span>318</span><span>319</span><span>//</span><span>データを解析します</span><span>320</span><span>$lines</span> = <span>explode</span>("n", <span>$respdata</span><span>); </span><span>321</span><span>$this</span>->pdtData = <span>array</span><span>(); </span><span>322</span><span>for</span> (<span>$i</span>=1; <span>$i</span>count(<span>$lines</span>);<span>$i</span>++<span>){ </span><span>323</span><span>if</span> (!<span>strstr</span>(<span>$lines</span>[<span>$i</span>], "=")) <span>続ける</span><span>; </span><span>324</span><span>リスト</span>(<span>$key</span>,<span>$val</span>) = <span>explode</span>("=", <span>$lines</span>[<span>$i</span><span>]); </span><span>325</span><span>$this</span>->pdtData[<span>urldecode</span>(<span>$key</span>)] = <span>urldecode</span>(<span>$val</span><span>); </span><span>326</span><span> } </span><span>327</span><span>328</span><span>if</span> (<span>$this</span>->pdtData['txn_id'] == '' || <span>$this</span>->pdtData['payment_status'] == ''<span>) { </span><span>329</span> ipn_debug_email('PDT が無効なデータを返しました。代わりに IPN が処理するまで待つ必要があります。' . "n" . <span>print_r</span>(<span>$this</span>->pdtData, <span>true</span><span>)); </span><span>330</span><span>return</span><span>FALSE</span><span>; </span><span>331</span> } <span>else</span><span> { </span><span>332</span> ipn_debug_email('PDT 返されたデータ ' . <span>print_r</span>(<span>$this</span>->pdtData, <span>true</span><span>)); </span><span>333</span><span> } </span><span>334</span><span>335</span><span>$_POST</span>['mc_gross'] = <span>$this</span>->pdtData['mc_gross'<span>]; </span><span>336</span><span>$_POST</span>['mc_currency'] = <span>$this</span>->pdtData['mc_currency'<span>]; </span><span>337</span><span>$_POST</span>['ビジネス'] = <span>$this</span>->pdtData['ビジネス'<span>]; </span><span>338</span><span>$_POST</span>['receiver_email'] = <span>$this</span>->pdtData['receiver_email'<span>]; </span><span>339</span><span>340</span><span>$PDTstatus</span> = (ipn_validate_transaction(<span>$respdata</span>, <span>$this</span>->pdtData, 'PDT') && valid_payment(<span>$orderAmount</span>, <span>$my_currency) </span>、「PDT」) && <span>$this</span>->pdtData['payment_status'] == '完了'<span>); </span><span>341</span><span>if</span> (<span>$this</span>->pdtData['payment_status'] != '' && <span>$this</span>->pdtData['payment_status'] != 'Completed'<span>) { </span><span>342</span> ipn_debug_email('PDT 警告 :: 注文は「完了」としてマークされていません。保留中の理由を確認するか、IPN が完了するまでお待ちください。' . "n" . '[payment_status] => ' . <span>$this</span>- >pdtData['payment_status'] . '[pending_reason] => <span>$this</span>->pdtData['pending_reason'<span>]); </span><span>343</span><span> } </span><span>344</span><span>345</span><span>$sql</span> = "<span>SELECT order_id、paypal_ipn_id、payment_status、txn_type、pending_reason </span><span>346</span>「 . TABLE_PAYPAL . 」から <span>347</span><span> WHERE txn_id = :transactionID またはparent_txn_id = :transactionID </span><span>348</span> order_id DESC で注文 "<span>; </span><span>349</span><span>$sql</span> = <span>$db</span>->bindVars(<span>$sql</span>, ':transactionID', <span>$this</span>->pdtData['txn_id'], 'string'<span>); </span><span>350</span><span>$ipn_id</span> = <span>$db</span>->Execute(<span>$sql</span><span>); </span><span>351</span><span>if</span> (<span>$ipn_id</span>->RecordCount() != 0<span>) { </span><span>352</span> ipn_debug_email('PDT 警告 :: トランザクションはすでに存在します。おそらく IPN がすでに追加しています。PDT 処理は終了しました。'<span>); </span><span>353</span><span>$pdtTXN_is_unique</span> = <span>false</span><span>; </span><span>354</span> } <span>else</span><span> { </span><span>355</span><span>$pdtTXN_is_unique</span> = <span>true</span><span>; </span><span>356</span><span> } </span><span>357</span><span>358</span><span>$PDTstatus</span> = (<span>$pdtTXN_is_unique</span> && <span>$PDTstatus</span><span>); </span><span>359</span><span>360</span><span>return</span><span>$PDTstatus</span><span>; </span><span>361</span><span> }</span><span>362</span><span>363</span><span>364</span><span>関数</span><span> tableCheckup() { </span><span>365</span><span>グローバル</span><span>$db</span>、<span>$スニファー</span><span>; </span><span>366</span><span>$fieldHealthy1</span> = (<span>method_exists</span>(<span>$sniffer</span>, 'field_type')) ? <span>$sniffer</span>->field_type(TABLE_PAYPAL, 'txn_id', 'varchar(20)', <span>true</span>) : -1<span>; </span><span>367</span><span>$fieldHealthy2</span> = (<span>$sniffer</span>->field_exists(TABLE_PAYPAL, 'module_name')) ? <span>本当</span> : -1<span>; </span><span>368</span><span>$field大丈夫3</span> = (<span>$sniffer</span>->field_exists(TABLE_PAYPAL, 'order_id')) ? <span>本当</span> : -1<span>; </span><span>369</span><span>370</span><span>if</span> (<span>$field大丈夫1</span> == -1<span>) { </span><span>371</span><span>$sql</span> = "「 .<span> TABLE_PAYPAL 」のフィールドを表示します。 </span><span>372</span><span>$result</span> = <span>$db</span>->Execute(<span>$sql</span><span>); </span><span>373</span><span>ながら</span> (!<span>$結果</span>-><span>EOF) { </span><span>374</span><span>if</span> (<span>$result</span>->fields['フィールド'] == 'txn_id'<span>) { </span><span>375</span><span>if</span> (<span>$result</span>->fields['Type'] == 'varchar(20)'<span>) { </span><span>376</span><span>$field大丈夫1</span> = <span>true</span>; <span>//</span><span> が存在し、必要なタイプと一致するため、他の検査にスキップします</span><span>377</span> } <span>else</span><span> { </span><span>378</span><span>$fieldHealthy1</span> = <span>$result</span>->fields['Type']; <span>//</span><span>は一致しないので、「そのまま」を返します</span><span>379</span><span>break</span><span>; </span><span>380</span><span> } </span><span>381</span><span> } </span><span>382</span><span>$result</span>-><span>MoveNext(); </span><span>383</span><span> } </span><span>384</span><span> } </span><span>385</span><span>386</span><span>if</span> (<span>$field大丈夫1</span> !== <span>true</span><span>) { </span><span>387</span><span>//</span><span> v1.3.7.x のテーブル構造の一時的な修正 -- 後のリリースでは削除される可能性があります</span><span>388</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGEpayment_type payment_type varchar(40) NOT NULL デフォルト ''"<span>); </span><span>389</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE txn_type txn_type varchar(40) NOT NULL デフォルト ''"<span>); </span><span>390</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGEpayment_statuspayment_status varchar(32) NOT NULL デフォルト ''"<span>); </span><span>391</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGEreason_codereason_code varchar(40)defaultNULL"<span>); </span><span>392</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE pending_reason pending_reason varchar(32) default NULL"<span>); </span><span>393</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE 請求書請求書 varchar(128) デフォルト NULL"<span>); </span><span>394</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE payer_business_name payer_business_name varchar(128) default NULL"<span>); </span><span>395</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE address_name address_name varchar(64) default NULL"<span>); </span><span>396</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE address_street address_street varchar(254) default NULL"<span>); </span><span>397</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE address_city address_city varchar(120) default NULL"<span>); </span><span>398</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE address_state address_state varchar(120) デフォルト NULL"<span>); </span><span>399</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE payer_email payer_email varchar(128) NOT NULL デフォルト ''"<span>); </span><span>400</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE business business varchar(128) NOT NULL default ''"<span>); </span><span>401</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGEReceiver_emailreceiver_email varchar(128) NOT NULL デフォルト ''"<span>); </span><span>402</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE txn_id txn_id varchar(20) NOT NULL デフォルト ''"<span>); </span><span>403</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGEparent_txn_idparent_txn_id varchar(20)defaultNULL"<span>); </span><span>404</span><span> }</span><span>405</span><span>if</span> (<span>$field大丈夫2</span> !== <span>true</span><span>) { </span><span>406</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " ADD COLUMN module_name varchar(40) NOT NULL default '' after txn_type"<span>); </span><span>407</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " ADD COLUMN module_mode varchar(40) NOT NULL default '' after module_name"<span>); </span><span>408</span><span> } </span><span>409</span><span>if</span> (<span>$field大丈夫3</span> !== <span>true</span><span>) { </span><span>410</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE zen_order_id order_id int(11) NOT NULL デフォルト '0'"<span>); </span><span>411</span><span> } </span><span>412</span><span> } </span><span>413</span><span>414</span><span>function</span> paynow_button(<span>$order_id</span><span>) { </span><span>415</span><span>グローバル</span><span>$db</span>、<span>$order</span>、<span>$通貨</span>、<span>$通貨</span><span>; </span><span>416</span><span>require_once</span>(DIR_WS_CLASSES . 'order.php'<span>); </span><span>417</span><span>$order</span> = <span>新しい</span> order(<span>$order_id</span><span>); </span><span>418</span><span>$options</span> = <span>array</span><span>(); </span><span>419</span><span>$optionsCore</span> = <span>array</span><span>(); </span><span>420</span><span>$optionsPhone</span> = <span>array</span><span>(); </span><span>421</span><span>$optionsShip</span> = <span>array</span><span>(); </span><span>422</span><span>$optionsLineItems</span> = <span>array</span><span>(); </span><span>423</span><span>$optionsAggregate</span> = <span>array</span><span>(); </span><span>424</span><span>$optionsTrans</span> = <span>array</span><span>(); </span><span>425</span><span>$buttonArray</span> = <span>array</span><span>(); </span><span>426</span><span>427</span><span>$this</span>->totalsum = <span>$order</span>->info['total'<span>]; </span><span>428</span><span>429</span><span>//</span><span> PayPal がセッションを失った場合に備えて、セッション内容を永久に保存します</span><span>430</span><span>$_SESSION</span>['pipn_key_to_remove'] = <span>session_id</span><span>(); </span><span>431</span><span>$db</span>->Execute("delete from " . TABLE_PAYPAL_SESSION . " where session_id = '" . zen_db_input(<span>$_SESSION</span>['pipn_key_to_remove']) . "'"<span>); </span><span>432</span><span>433</span><span>$sql</span> = "に挿入" 。 TABLE_PAYPAL_SESSION 。 "<span> (session_id、saved_session、expiry) 値 ( </span><span>434</span> '" .zen_db_input(<span>$_SESSION</span>['pipn_key_to_remove']) . "<span>', </span><span>435</span> '" . <span>base64_encode</span>(<span>serialize</span>(<span>$_SESSION</span>)) . "<span>', </span><span>436</span> '" . (<span>時間</span>() + (1*60*60*24*2)) . "')"<span>; </span><span>437</span><span>438</span><span>$db</span>->Execute(<span>$sql</span><span>); </span><span>439</span><span>440</span><span>$my_currency</span> =<span> select_pp_currency(); </span><span>441</span><span>if</span>(!<span>空</span>(<span>$order</span>->情報['通貨'<span>])){ </span><span>442</span><span>$my_currency</span>=<span>$order</span>->info['通貨'<span>]; </span><span>443</span><span> } </span><span>444</span><span>$this</span>->transaction_currency = <span>$my_currency</span><span>; </span><span>445</span><span>446</span><span>$this</span>->transaction_amount = (<span>$this</span>->totalsum * <span>$currency</span>->get_value(<span>$my_currency</span><span>)); </span><span>447</span><span>448</span><span>$telephone</span> = <span>preg_replace</span>('/D/', '', <span>$order</span>->customer['telephone'<span>]); </span><span>449</span><span>if</span> (<span>$電話</span> != ''<span>) { </span><span>450</span><span>$optionsPhone</span>['H_PhoneNumber'] = <span>$telephone</span><span>; </span><span>451</span><span>if</span> (<span>in_array</span>(<span>$order</span>->顧客['country']['iso_code_2'], <span>array</span>('US','CA'<span>))) { </span><span>452</span><span>$optionsPhone</span>['night_phone_a'] = <span>substr</span>(<span>$telephone</span>,0,3<span>); </span><span>453</span><span>$optionsPhone</span>['night_phone_b'] = <span>substr</span>(<span>$telephone</span>,3,3<span>); </span><span>454</span><span>$optionsPhone</span>['night_phone_c'] = <span>substr</span>(<span>$telephone</span>,6,4<span>); </span><span>455</span><span>$optionsPhone</span>['day_phone_a'] = <span>substr</span>(<span>$telephone</span>,0,3<span>); </span><span>456</span><span>$optionsPhone</span>['day_phone_b'] = <span>substr</span>(<span>$telephone</span>,3,3<span>); </span><span>457</span><span>$optionsPhone</span>['day_phone_c'] = <span>substr</span>(<span>$telephone</span>,6,4<span>); </span><span>458</span> }<span>他</span><span> { </span><span>459</span><span>$optionsPhone</span>['night_phone_b'] = <span>$telephone</span><span>; </span><span>460</span><span>$optionsPhone</span>['day_phone_b'] = <span>$telephone</span><span>; </span><span>461</span><span> } </span><span>462</span><span> }</span><span>463</span><span>464</span><span>$optionsCore</span> = <span>array</span><span>( </span><span>465</span> 'lc' =>私たち、 <span>466</span><span>//</span><span>'lc' => $order->customer['country']['iso_code_2'],</span><span>467</span> 'charset' =>文字コード、 <span>468</span> 'page_style' => MODULE_PAYMENT_PAYPAL_PAGE_STYLE、 <span>469</span> 'カスタム' => zen_session_name() 。 '=' 。 zen_session_id()、 <span>470</span> '請求書' => <span>$order</span>->情報['num']、 <span>471</span> 'ビジネス' => MODULE_PAYMENT_PAYPAL_BUSINESS_ID、 <span>472</span> '戻る' => zen_href_link(FILENAME_CHECKOUT_PROCESS, 'referer=paypal', 'SSL'), <span>473</span> 'cancel_return' => zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'), <span>474</span> 'ショッピング URL' => zen_href_link(FILENAME_SHOPPING_CART, '', 'SSL'), <span>475</span> 'notify_url' => zen_href_link('ipn_main_handler.php', '', 'SSL',<span>false</span>,<span>false</span>,<span>true</span>), <span>476</span> 'redirect_cmd' => '_xclick','rm' => 2,'bn' => 'zencart','mrb' => 'R-6C7952342H795591R','pal' => '9E82WJBKKGPLQ', <span>477</span><span> ); </span><span>478</span><span>$optionsCust</span> = <span>配列</span><span>( </span><span>479</span> '名' => replace_accents(<span>$order</span>->顧客['名']), <span>480</span> '姓' => replace_accents(<span>$order</span>->顧客['姓']), <span>481</span> 'アドレス1' => replace_accents(<span>$order</span>->顧客['番地']), <span>482</span> '都市' => replace_accents(<span>$order</span>->customer['city']), <span>483</span> '状態' => zen_get_zone_code(<span>$order</span>->顧客['country']['id'], <span>$order</span>->顧客['zone_id'], <span>$order</span>->顧客['state']), <span>484</span> 'zip' => <span>$order</span>->顧客['郵便番号']、 <span>485</span> '国' => <span>$order</span>->顧客['国']['iso_code_2'], <span>486</span> 'メール' => <span>$order</span>->顧客['email_address'], <span>487</span><span> ); </span><span>488</span><span>//</span><span>住所2行目はオプションです</span><span>489</span><span>if</span> (<span>$order</span>->customer['suburb'] != '') <span>$optionsCust</span>['address2'] = <span>$order</span>->顧客['郊外'<span>]; </span><span>490</span><span>//</span><span>日本語の住所レイアウトの異なる形式:</span><span>491</span><span>if</span> (<span>$order</span>->customer['country']['iso_code_2'] == 'JP') <span>$ optionsCust</span>['zip'] = <span>substr</span>(<span>$order</span>->customer['postcode'], 0, 3) 。 「-」。 <span>substr</span>(<span>$order</span>->顧客['郵便番号'], 3<span>); </span><span>492</span><span>if</span> (MODULE_PAYMENT_PAYPAL_ADDRESS_REQUIRED == 2<span>) { </span><span>493</span><span>$optionsCust</span> = <span>配列</span><span>( </span><span>494</span> '名' => replace_accents(<span>$order</span>->delivery['firstname'] != '' ? <span>$order</span>->delivery['firstname'] : <span>$order</span>->billing['firstname']), <span>495</span> '姓' => replace_accents(<span>$order</span>->delivery['lastname'] != '' ? <span>$order</span>->delivery['lastname'] : <span>$order</span>->billing['lastname']), <span>496</span> 'アドレス1' => replace_accents(<span>$order</span>->delivery['street_address'] != '' ? <span>$order</span>->delivery['street_address'] : <span>$order</span>->billing['street_address']), <span>497</span> '都市' => replace_accents(<span>$order</span>->delivery['city'] != '' ? <span>$order</span>->delivery['city'] : <span>$order</span>->billing['city']), <span>498</span> '状態' => (<span>$order</span>->delivery['country']['id'] != '' ? zen_get_zone_code(<span>$order</span>->delivery['country']['id'], <span>$order</span>- >delivery['zone_id'], <span>$order</span>->delivery['state']) : zen_get_zone_code(<span>$order</span>->billing['country']['id'], <span>$order</span>- >billing['zone_id'], <span>$order</span>->billing['state'])), <span>499</span> 'zip' => (<span>$order</span>->delivery['郵便番号'] != '' ? <span>$order</span>->delivery['郵便番号'] : <span>$order</span>->billing['postcode']), <span>500</span> '国' => (<span>$order</span>->delivery['country']['title'] != '' ? <span>$order</span>->配送['国']['タイトル'] : <span>$order</span>->請求['国']['タイトル'])、 <span>501</span> '国コード' => (<span>$order</span>->delivery['country']['iso_code_2'] != '' ? <span>$order</span>->delivery['country']['iso_code_2'] : <span>$order</span>->請求['国']['iso_code_2'])、 <span>502</span> 'メール' => <span>$order</span>->顧客['email_address'], <span>503</span><span> ); </span><span>504</span><span>if</span> (<span>$order</span>->delivery['郊外'] != '') <span>$optionsCust</span>['address2'] = <span>$order</span>->delivery['郊外'<span>] ; </span><span>505</span><span>if</span> (<span>$order</span>->delivery['country']['iso_code_2'] == 'JP') <span>$optionsCust</span>['zip'] = <span>substr</span>(<span>$order</span>) ->配達['郵便番号']、0、3) 。 「-」。 <span>substr</span>(<span>$order</span>->delivery['郵便番号'], 3<span>); </span><span>506</span><span> } </span><span>507</span><span>$optionsShip</span>['no_shipping'] =<span> MODULE_PAYMENT_PAYPAL_ADDRESS_REQUIRED; </span><span>508</span><span>if</span> (MODULE_PAYMENT_PAYPAL_ADDRESS_OVERRIDE == '1') <span>$optionsShip</span>['address_override'] =<span> MODULE_PAYMENT_PAYPAL_ADDRESS_OVERRIDE; </span><span>509</span><span>//</span><span>可能な場合はカートの内容の詳細を準備します</span><span>510</span><span>if</span> (MODULE_PAYMENT_PAYPAL_DETAILED_CART == 'Yes') <span>$optionsLineItems</span> =<span> ipn_getLineItemDetails(); </span><span>511</span><span>if</span> (<span>sizeof</span>(<span>$optionsLineItems</span>) > 0<span>) { </span><span>512</span><span>$optionsLineItems</span>['cmd'] = '_cart'<span>; </span><span>513</span><span>//</span><span> $optionsLineItems['num_cart_items'] = sizeof($order->products);</span><span>514</span><span>if</span> (<span>isset</span>(<span>$optionsLineItems</span>['shipping'<span>] ) ) { </span><span>515</span><span>$optionsLineItems</span>['shipping_1'] = <span>$optionsLineItems</span>['shipping'<span>]; </span><span>516</span><span>設定解除</span>(<span>$optionsLineItems</span>['shipping'<span>]); </span><span>517</span><span> } </span><span>518</span><span>unset</span>(<span>$optionsLineItems</span>['小計'<span>]); </span><span>519</span><span>//</span><span> 計算の不一致や割引などにより品目の詳細を保持できなかった場合、デフォルトで集約モードになります</span><span>520</span><span>if</span> (!<span>isset</span>(<span>$optionsLineItems</span>[' item_name_1']) || <span>$optionsLineItems</span>['creditsExist'] == <span>TRUE</span>) <span>$optionsLineItems</span> = <span>array</span><span>(); </span><span>521</span><span>//</span><span>if ($optionsLineItems['amount'] != $this->transaction_amount) $optionsLineItems = array(); </span><span>522</span><span> // デバッグ: </span><span>523</span><span> //ipn_debug_email('品目の詳細 (空白の場合、データの不一致またはクレジットが適用されたためバイパスされたことを意味します): ' . "n" . print_r($optionsLineItems, true));</span><span> 524</span><span>unset</span>(<span>$optionsLineItems</span>['creditsExist'<span>]); </span><span>525</span><span> }</span><span>526</span><span>$options集計</span> = <span>配列</span><span>( </span><span>527</span> 'cmd' => '_ext-enter', <span>528</span> 'アイテム名' => MODULE_PAYMENT_PAYPAL_PURCHASE_DESCRIPTION_TITLE、 <span>529</span> 'アイテム番号' => MODULE_PAYMENT_PAYPAL_PURCHASE_DESCRIPTION_ITEMNUM、 <span>530</span><span>//</span><span>'num_cart_items' => sizeof($order->products),</span><span>531</span> '金額' => <span>number_format</span>(<span>$this</span>->transaction_amount, <span>$currency</span>->get_Decimal_places(<span>$my_currency</span>)), <span>532</span> '配送' => 「0.00」、 <span>533</span><span> ); </span><span>534</span><span>if</span> (MODULE_PAYMENT_PAYPAL_TAX_OVERRIDE == 'true') <span>$optionsAggregate</span>['tax'] = '0.00'<span>; </span><span>535</span><span>if</span> (MODULE_PAYMENT_PAYPAL_TAX_OVERRIDE == 'true') <span>$optionsAggregate</span>['tax_cart'] = '0.00'<span>; </span><span>536</span><span>$optionsTrans</span> = <span>配列</span><span>( </span><span>537</span> 'アップロード' => (int)(<span>sizeof</span>(<span>$order</span>->商品) > 0), <span>538</span> '通貨コード' => <span>$my_currency</span>、 <span>539</span><span>//</span><span>'paypal_order_id' => $paypal_order_id、 </span><span>540</span><span> //'no_note' => 「1」、 </span><span>541</span><span> //'請求書' => ''、</span><span>542</span><span> ); </span><span>543</span><span>544</span><span>//</span><span> ラインアイテム情報が無効な場合は、aggregate:</span><span>545</span><span>if</span> (<span>sizeof</span>(<span>$optionsLineItems</span>) > <span>$optionsAggre)ゲート</span> = <span> $optionsLineItems</span><span>; </span><span>546</span><span>547</span><span>//</span><span>送信を準備します</span><span>548</span><span>$options</span> = <span>array_merge</span>(<span>$optionsCore</span>, <span>$optionsCust</span>, tionsPhone<span>、</span>$optionsShip<span>、</span>$optionsTrans <span>、</span>$optionsAggregate<span></span>); <span></span>549<span></span>//<span></span>ipn_debug_email('送信用のキー: ' .print_r($options, true)); <span></span>550<span></span>551<span></span> // ボタンフィールドを構築します<span></span>552<span></span>foreach<span> (</span>$options<span></span>as<span></span>$name<span> => </span>$value<span></span>) { <span></span>553<span></span>//<span></span>引用符を削除します<span></span>554<span></span>$value<span> = </span>str_replace<span>('"', '', </span>$value<span></span>); <span></span>555<span></span>//<span></span>無効な文字をチェック<span></span>556<span></span>if<span> (</span>preg_match<span>('/[^a-zA-Z_0-9]/', </span>$name<span></span>)) { <span></span>557<span> ipn_debug_email('datacheck - ABORTING - preg_match で無効な送信キーが見つかりました: ' . </span>$name<span> . ' (' . </span>$value<span> . ')'</span>); <span></span>558<span></span>休憩<span></span>; <span></span>559<span></span> } <span></span>560<span></span>//<span></span> & および = 記号には特別な処理が必要ですか? <span></span>561<span></span> //if (strpos($value, '&') !== false || strpos($value, '=') !== false) $value = urlencode($value);<span></span>562 <span></span>563<span></span>$bu</strong></strong>