> 백엔드 개발 > PHP 튜토리얼 > Zencart는 Taobao 백엔드에서 주문 가격을 수정하는 것과 유사하게 주문 후 결제합니다.

Zencart는 Taobao 백엔드에서 주문 가격을 수정하는 것과 유사하게 주문 후 결제합니다.

WBOY
풀어 주다: 2016-08-08 09:21:19
원래의
1632명이 탐색했습니다.

Zencart가 결제를 위해 Paypal을 사용하는 경우 누락된 주문이 발생합니다. 즉, Paypal이 고객의 결제를 받았지만 웹사이트 백엔드에는 고객의 주문이 없습니다. 페이팔에서 주문이 누락되는 가장 큰 이유는 고객이 페이팔 웹사이트에 접속해 결제를 완료했는데 바로 창을 닫거나, 네트워크가 불안정해 웹사이트로 정상적으로 점프하지 못하는 경우다.

Paypal 주문 누락 문제에 대한 몇 가지 해결 방법이 있습니다.

1. 장바구니 옵션에서 세부 항목을 켭니다.

원칙: zencart 백엔드 모듈 --> PayPal 웹사이트 결제 표준 - IPN에서 장바구니에 있는 세부 품목을 엽니다. 이 옵션은 모든 주문 항목 정보를 PayPal로 전송합니다. 고객이 성공적으로 결제했지만 백엔드에서 주문을 생성하지 못한 경우 PayPal 계정 거래 정보를 통해 고객이 구매한 항목도 확인할 수 있습니다.

2. Paypal Sessions Viewer 플러그인을 사용하여 Paypal에서 놓친 주문을 검색하세요.

원칙: zencart 장바구니에 담긴 상품이 페이팔을 통해 결제된 경우 결제에 대한 모든 기록이 paypal_session 테이블에 저장됩니다. 결제가 성공하면 페이팔 웹사이트가 쇼핑 웹사이트로 이동하고 주문이 생성되면 zencart 시스템은 이 paypal_session 기록을 자동으로 삭제합니다. 쇼핑 웹사이트로 이동하지 못하고 주문이 성공적으로 생성되지 않으면 Paypal을 사용할 때 이 결제 기록 데이터가 항상 데이터베이스에 저장됩니다. 세션 뷰어 플러그인을 사용하면 고객 정보, 쇼핑 시간, 제품 정보 등 기록된 모든 데이터를 볼 수 있으며, 결제가 완료되었다고 확신하는 경우 이 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단계까지의 과정에서 사용자는 결제가 성공했다고 생각하고 바로 웹페이지를 닫거나, 네트워크상의 문제로 인해 checkout_process 페이지로 정상적으로 점프하지 못하는 경우가 발생할 수 있습니다. 이는 주문이 정상적으로 생성될 수 없기 때문에 매우 심각한 문제입니다. 위의 분석을 바탕으로 프로세스를 약간 변경하여 결제 전에 주문이 생성되도록 하여 제3자 결제 웹사이트에서 결제를 되돌릴 수 없더라도 사용자가 결제하지 않도록 하고자 합니다. 성공적이지만 주문 상태에는 오류가 없습니다.

주문 누락을 방지하기 위해 zen-cart 주문 및 결제 프로세스를 수정하는 방법에 대한 Dongguo 선생님의 튜토리얼을 따랐습니다. 이 튜토리얼은 상대적으로 오래되었고 그다지 포괄적이지 않기 때문에 실제 필요에 따라 직접 제작했습니다. 좀 더 완벽하고 자세하게 만들어야 해요.

수정된 도면은 기본적으로 다음과 같습니다.

1. checkour_confirmation 페이지에서 주문 확인 후, 바로 account_history_info 페이지로 접속하여 결제 페이지로 진입하게 됩니다. 아래 그림과 같습니다.

2. 고객이 해당 시점에 결제에 실패하면 자신의 백엔드에 들어가 과거 주문에 대한 결제도 가능합니다. 아래 사진과 같습니다.

3. 미결제 주문의 경우 매장주님이 타오바오처럼 상품 사진을 찍은 후 백그라운드에서 가격을 수정하실 수 있습니다. 지불하기 전에 가격을 수정합니다. 아래 그림과 같이

정식으로 코드를 수정해 보겠습니다. 먼저 수정할 파일을 모두 나열합니다.

1. /결제 .php

2. 포함/모듈/결제/paypal.php

3. 포함/클래스/주문.php

4. checkout_process/header_php.php

5. include/modules/pages/account_history_info/header_php.php

6. include/templates/템플릿 디렉터리/templates/tpl_account_history_info_default.php

7. 포함/템플릿/템플릿 디렉터리/templates/tpl_account_history_default.php

8. ipn_main_handler.php

9. admin(백엔드 디렉터리)/orders.php

먼저 주문을 한 뒤 결제를 하기 때문에 결제 단계가 이전보다 한 단계 더 진행됩니다. 결제 과정을 단순화하기 위해 Fast And Easy Checkout For Zencart(빠른 결제) 플러그인을 설치했습니다. 이 플러그인을 설치하려면 빠른 결제 플러그인의 종속 플러그인인 Plug-in 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이 부여된 것을 볼 수 있습니다. 왜냐하면 사용자가 "Confirm Order"를 클릭한 후 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 웹사이트 결제 표준(IPN) 방식을 위한 paypal.php 결제 모듈 클래스
</span><span> 4</span><span> *
</span><span> 5</span><span> * @package PaymentMethod
</span><span> 6</span><span> * @copyright Copyright 2003-2010 Zen Cart 개발팀
</span><span> 7</span><span> * @copyright Portions Copyright 2003 osCommerce
</span><span> 8</span><span> * @license http://www.zen-cart.com/license/2_0.txt GNU Public License 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>정의</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) .'결제/페이팔/paypal_functions.php'<span>);
</span><span> 18</span><span> 19</span><span>/*</span><span>*
</span><span> 20</span><span> * PayPal 웹사이트 결제 표준(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>$enabled</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 = '페이팔'<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> 관리자의 결제 모듈 제목</span><span> 60</span><span>if</span> (IS_ADMIN_FLAG === <span>true</span> && <span>정의됨 </span>('MODULE_PAYMENT_PAYPAL_IPN_DEBUG') && MODULE_PAYMENT_PAYPAL_IPN_DEBUG != '끄기') <span>$this</span>->title .= '<span> (디버그 모드 활성화)</span>'<span>;
</span><span> 61</span><span>if</span> (IS_ADMIN_FLAG === <span>true</span> && MODULE_PAYMENT_PAYPAL_TESTING == 'Test') <span>$this</span>->title . = '<스팬> (개발/테스트 모드 활성화)</span>'<span>;
</span><span> 62</span> } <span>그밖에</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>->description =<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>->enabled = ((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>->enabled = <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>참</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>->enabled == <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("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_PAYPAL_ZONE . ​​" ' 및 zone_country_id = '" . <span>$order</span>->billing['country']['id'] . "' order by zone_id"<span>);
</span><span> 89</span><span>while</span> (!<span>$check_query</span>-><span>EOF) {
</span><span> 90</span><span>if</span> (<span>$check_query</span>->fields['zone_id'] < 1<span>) {
</span><span> 91</span><span>$check_flag</span> = <span>참</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>참</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 문자열
</span><span>110</span><span>*/</span><span>111</span><span>함수</span><span> javascript_validation() {
</span><span>112</span><span>반품</span><span>거짓</span><span>;
</span><span>113</span><span> }
</span><span>114</span><span>/*</span><span>*
</span><span>115</span><span> * Checkout 결제 페이지에 신용카드 정보 제출 필드(있는 경우)와 함께 결제 방법 이름이 표시됩니다.
</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>반환</span><span>배열</span>('id' => <span>$this</span>->code,
<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> * 페이팔 모듈은 정보를 수집하지 않으므로 이 단계는 생략합니다.
</span><span>128</span><span> *
</span><span>129</span><span> * @return 부울
</span><span>130</span><span>*/</span><span>131</span><span>함수</span><span> pre_confirmation_check() {
</span><span>132</span><span>반품</span><span>거짓</span><span>;
</span><span>133</span><span> }
</span><span>134</span><span>/*</span><span>*
</span><span>135</span><span> * 결제 확인 페이지에 신용카드 정보 표시
</span><span>136</span><span> * 페이팔 사이트로 전달하기 전 페이팔로 수집된 것이 없으므로 생략합니다.
</span><span>137</span><span> *
</span><span>138</span><span> * @return 부울
</span><span>139</span><span>*/</span><span>140</span><span>기능</span><span> 확인() {
</span><span>141</span><span>반품</span><span>거짓</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 문자열
</span><span>149</span><span>*/</span><span>150</span><span>함수</span><span> process_button() {
</span><span>151</span><span>반품</span><span>거짓</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>함수</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>배열</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>배열</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>배열</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> = '미국'<span>;
</span><span>168</span><span> }
</span><span>169</span><span>//</span><span>반품 $orderISO['countries_iso_code_2'];</span><span>170</span><span>반품</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>반품</span><span>거짓</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 부울
</span><span>183</span><span>*/</span><span>184</span><span>함수</span> check_referrer(<span>$zf_domain</span><span>) {
</span><span>185</span><span>반품</span><span>참</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 문자열
</span><span>192</span><span>*/</span><span>193</span><span>기능</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 . '결제 /paypal/paypal_admin_notification.php')) <span>요구</span>(DIR_FS_CATALOG . DIR_WS_MODULES . '결제/페이팔/paypal_admin_notification.php'<span>);
</span><span>199</span><span>반환</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가 성공한 경우 결과를 주문 상태 내역에 저장하고 이후 참조를 위해 데이터를 기록합니다.
</span><span>204</span><span> *
</span><span>205</span><span> * @return 부울
</span><span>206</span><span>*/</span><span>207</span><span>함수</span><span> after_process() {
</span><span>208</span><span>반품</span><span>거짓</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 부울
</span><span>214</span><span>*/</span><span>215</span><span>함수</span><span> output_error() {
</span><span>216</span><span>반품</span><span>거짓</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 부울
</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>$sniffer</span><span>;
</span><span>227</span><span>if</span> (<span>$sniffer</span>->field_exists(TABLE_PAYPAL, 'zen_order_id')) <span>$db</span>->실행 ("ALTER TABLE " . TABLE_PAYPAL . " CHANGE COLUMN zen_order_id order_id int(11) NOT 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("" . TABLE_CONFIGURATION . "에서 구성_값 선택, 여기서 구성_키 = '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 웹사이트 결제 표준 모듈이 이미 설치되었습니다.', 'error'<span>);
</span><span>243</span> zen_redirect(zen_href_link(FILENAME_MODULES, 'set=결제&모듈=페이팔', 'NONSSL'<span>));
</span><span>244</span><span>반환</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=결제&모듈=paypalwpp', 'NONSSL'<span>));
</span><span>249</span><span>반품</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_add) 값( '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, 구성_키, 구성_값, 구성_설명, 구성_그룹_id, sort_order, 날짜_추가) 값('비즈니스 ID', 'MODULE_PAYMENT_PAYPAL_BUSINESS_ID','".STORE_OWNER_EMAIL_ADDRESS."', 'PayPal 계정의 기본 이메일 주소입니다.<br />참고: 이 주소는 PayPal 계정의 기본 이메일 주소와 <strong>정확히</strong>일치해야 합니다. PayPal 계정 설정은 <strong>대소문자를 구분합니다</strong> 따라서 paypal.com에서 PayPal 프로필 기본 설정을 확인하고 여기에 정확히 동일한 기본 이메일 주소를 입력하십시오.', '6', ' 2', 지금())"<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_add) 값( '거래 통화', '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_add) 값 ('결제 영역', 'MODULE_PAYMENT_PAYPAL_ZONE', '0', '영역을 선택한 경우 해당 영역에 대해서만 이 결제 방법을 활성화하세요.', '6', '4', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', 지금())"<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_add) 값 ('보류 알림 상태 설정', '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_add) 값 ('주문 상태 설정', '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_add) value ('환불 주문 상태 설정', '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_add) 값('Sort 표시 순서.', '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_add) 값('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 (배열('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_add) 값( '배송 주소 요구사항?', 'MODULE_PAYMENT_PAYPAL_ADDRESS_REQUIRED', '2', '구매자의 배송 주소입니다. 0으로 설정하면 고객에게 배송 주소를 포함하라는 메시지가 표시됩니다. . 2로 설정하면 고객은 배송 주소를 제공해야 합니다.<br />0=프롬프트<br />1=묻지 않음<br />2=필수<br /><br /><strong>참고: 고객이 자신의 배송 주소를 입력하도록 허용하는 경우 IPN(웹사이트 결제 표준)을 사용할 때 PayPal 확인 세부정보를 직접 수동으로 확인하여 올바른 주소를 확인하세요. Zen Cart는 PayPal에서 대체 배송 주소를 선택하는지 아니면 주문할 때 입력한 주소를 선택하는지 알 수 없습니다.', '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_add) 값( '장바구니의 세부 품목', 'MODULE_PAYMENT_PAYPAL_DETAILED_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, 구성_키, 구성_값, 구성_설명, 구성_그룹_id, sort_order, 날짜_추가) 값('페이지 Style', 'MODULE_PAYMENT_PAYPAL_PAGE_STYLE', 'Primary', '결제 페이지에 대한 맞춤 결제 페이지 스타일을 설정합니다. page_style 값은 페이지 스타일을 추가하거나 편집할 때 선택한 페이지 스타일 이름과 동일합니다. PayPal 사이트 내 계정 탭의 프로필 하위 탭에 있는 결제 페이지 스타일. 항상 기본 스타일을 참조하려면 이를 "기본"으로 설정하세요. 기본 PayPal 페이지 스타일을 참조하려면 다음으로 설정하세요. "페이팔".', '6', '25', now())"<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_add) 값( 'PayPal 웹 서비스 모드<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_add,use_function) 값('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_add) 값('디버그 모드', 'MODULE_PAYMENT_PAYPAL_IPN_DEBUG', 'Off', '디버그 로깅을 활성화하시겠습니까? <br />참고: 이로 인해 이메일 받은 편지함이 복잡해질 수 있습니다!<br />로깅은 /includes/modules/결제/paypal/logs 폴더로 이동됩니다.<br />이메일은 상점 소유자 주소로 이동됩니다. .<br />이메일 옵션은 권장되지 않습니다.<br /><strong>정상적인 작동을 위해서는 OFF로 두세요.</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_add) 값('Debug 이메일 주소', 'MODULE_PAYMENT_PAYPAL_DEBUG_EMAIL_ADDRESS','".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>함수</span><span> 제거() {
</span><span>277</span><span>글로벌</span><span>$db</span><span>;
</span><span>278</span><span>$db</span>->Execute("delete from " . TABLE_CONFIGURATION . " whereconfiguration_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>참</span><span>) {
</span><span>307</span><span>if</span> (<span>isset</span>(<span>$_GET</span>['debug']) && <span>$_GET</span>[ '디버그']=='설정'<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>반환</span><span>$keys_list</span><span>;
</span><span>312</span><span> }</span><span>313</span><span>314</span><span>함수</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>폭발</span>("n", <span>$respdata</span><span>);
</span><span>321</span><span>$this</span>->pdtData = <span>배열</span><span>();
</span><span>322</span><span></span>(<span>$i</span>=1; <span>$i</span><<span>개</span>(<span> $라인</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>폭발</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['결제_상태'] == ''<span>) {
</span><span>329</span> ipn_debug_email('PDT가 잘못된 데이터를 반환했습니다. 대신 IPN이 처리될 때까지 기다려야 합니다. ' . "n" . <span>print_r</span>(<span>$this</span>-&gt ;pdtData, <span>참</span><span>));
</span><span>330</span><span>반품</span><span>거짓</span><span>;
</span><span>331</span> } <span>그밖에</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_지불(<span>$orderAmount</span>, <span>$my_currency</span>, 'PDT') && <span>$this</span>->pdtData['지불_상태'] == '완료'<span>);
</span><span>341</span><span>if</span> (<span>$this</span>->pdtData['결제_상태'] != '' && <span>$this</span>-&gt ;pdtData['결제_상태'] != '완료'<span>) {
</span><span>342</span> ipn_debug_email('PDT 경고 :: 주문이 "완료"로 표시되지 않았습니다. 보류 이유를 확인하거나 IPN이 완료될 때까지 기다리세요.' . "n" . '[지불_상태] => ' . <span>$this</span>->pdtData['결제_상태'] . '[pending_reason] => >]);
<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, 보류 중인_이유
<span></span>346<span> FROM " . TABLE_PAYPAL . "
</span>347<span></span> txn_id = :transactionID 또는 parent_txn_id = :transactionID인 경우
<span></span>348<span> ORDER BY 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>거짓<span></span>;
<span></span>354<span> } </span>그밖에<span></span> {
<span></span>355<span></span>$pdtTXN_is_unique<span> = </span>참<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>반품<span></span>$PDTstatus<span></span>;
<span></span>361<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>$sniffer</span><span>;
</span><span>366</span><span>$fieldOkay1</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>$fieldOkay2</span> = (<span>$sniffer</span>->field_exists(TABLE_PAYPAL, 'module_name')) ? <span>사실</span> : -1<span>;
</span><span>368</span><span>$fieldOkay3</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>$fieldOkay1</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>$result</span>-><span>EOF) {
</span><span>374</span><span>if</span> (<span>$result</span>->fields['Field'] == 'txn_id'<span>) {
</span><span>375</span><span>if</span> (<span>$result</span>->fields['Type'] == 'varchar(20)'<span>) {
</span><span>376</span><span>$fieldOkay1</span> = <span>참</span>; <span>//</span><span>이 존재하고 필수 유형과 일치하므로 다른 점검으로 건너뛰세요</span><span>377</span> } <span>else</span><span> {
</span><span>378</span><span>$fieldOkay1</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>$fieldOkay1</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 . " CHANGE Payment_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 . " CHANGE Payment_status Payment_status varchar(32) NOT NULL 기본값 ''"<span>);
</span><span>391</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE Reason_code Reason_code varchar(40) 기본값 NULL"<span>);
</span><span>392</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE 보류 중_reason 보류 중_reason varchar(32) 기본값 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) 기본값 NULL"<span>);
</span><span>395</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE address_name address_name varchar(64) 기본값 NULL"<span>);
</span><span>396</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE address_street address_street varchar(254) 기본값 NULL"<span>);
</span><span>397</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE address_city address_city varchar(120) 기본값 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 기본값 ''"<span>);
</span><span>401</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " CHANGE receive_email receive_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 . " CHANGE parent_txn_id parent_txn_id varchar(20) 기본값 NULL"<span>);
</span><span>404</span><span> }</span><span>405</span><span>if</span> (<span>$fieldOkay2</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 기본값 '' after txn_type"<span>) ;
</span><span>407</span><span>$db</span>->Execute("ALTER TABLE " . TABLE_PAYPAL . " ADD COLUMN module_mode varchar(40) NOT NULL 기본값 '' after module_name"<span>) ;
</span><span>408</span><span> }
</span><span>409</span><span>if</span> (<span>$fieldOkay3</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>기능</span> paynow_button(<span>$order_id</span><span>) {
</span><span>415</span><span>글로벌</span><span>$db</span>, <span>$order</span>, <span>$currency</span>, <span>$currency</span><span>;
</span><span>416</span><span>require_once</span>(DIR_WS_CLASSES . 'order.php'<span>);
</span><span>417</span><span>$order</span> = <span>new</span> order(<span>$order_id</span><span>);
</span><span>418</span><span>$options</span> = <span>배열</span><span>();
</span><span>419</span><span>$optionsCore</span> = <span>배열</span><span>();
</span><span>420</span><span>$optionsPhone</span> = <span>배열</span><span>();
</span><span>421</span><span>$optionsShip</span> = <span>배열</span><span>();
</span><span>422</span><span>$optionsLineItems</span> = <span>배열</span><span>();
</span><span>423</span><span>$optionsAggregate</span> = <span>배열</span><span>();
</span><span>424</span><span>$optionsTrans</span> = <span>배열</span><span>();
</span><span>425</span><span>$buttonArray</span> = <span>배열</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> 페이팔이 세션을 잃을 경우에 대비해 세션 내용을 영구적으로 저장하세요</span><span>430</span><span>$_SESSION</span>['ppipn_key_to_remove'] = <span>세션_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>['ppipn_key_to_remove ']) ."'"<span>);
</span><span>432</span><span>433</span><span>$sql</span> = "에 삽입 " . TABLE_PAYPAL_SESSION. "<span> (session_id, 저장된_세션, 만료) 값(
</span><span>434</span> '" . zen_db_input(<span>$_SESSION</span>['ppipn_key_to_remove']) . "<span>',
</span><span>435</span> '" . <span>base64_encode</span>(<span>직렬화</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>->info['currency'<span>])){
</span><span>442</span><span>$my_currency</span>=<span>$order</span>->info['currency'<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>->고객['전화'<span>]);
</span><span>449</span><span>if</span> (<span>$telephone</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>->customer['country']['iso_code_2'], <span>배열</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>배열</span><span>(
</span><span>465</span> 'lc' => 우리를,
<span>466</span><span>//</span><span>'lc' => $order->customer['country']['iso_code_2'],</span><span>467</span> '문자 집합' => 문자세트,
<span>468</span> '페이지_스타일' => 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> 'shopping_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','친구' => '9E82WJBKKGPLQ',
<span>477</span><span> );
</span><span>478</span><span>$optionsCust</span> = <span>배열</span><span>(
</span><span>479</span> '이름' => replacement_accents(<span>$order</span>->customer['firstname']),
<span>480</span> '성' => replacement_accents(<span>$order</span>->customer['lastname']),
<span>481</span> '주소1' => replacement_accents(<span>$order</span>->고객['street_address']),
<span>482</span> '도시' => replacement_accents(<span>$order</span>->customer['city']),
<span>483</span> '상태' => zen_get_zone_code(<span>$order</span>->customer['country']['id'], <span>$order</span>->customer['zone_id'], <span>$order</span>->고객['상태']),
<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['교외'] != '') <span>$optionsCust</span>['address2'] = <span>$order</span>->customer['교외'<span>] ;
</span><span>490</span><span>//</span><span> 일본어 주소 레이아웃의 다른 형식:</span><span>491</span><span>if</span> (<span>$ 주문</span>->customer['country']['iso_code_2'] == 'JP') <span>$optionsCust</span>['zip'] = <span>substr</span>(<span>$ 주문</span>->고객['우편번호'], 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> '이름' => replacement_accents(<span>$order</span>->delivery['firstname'] != '' ? <span>$order</span>->delivery['firstname'] : <span>$order</span> ->결제['이름']),
<span>495</span> '성' => replacement_accents(<span>$order</span>->delivery['lastname'] != '' ? <span>$order</span>->delivery['lastname'] : <span>$order</span> ->결제['성']),
<span>496</span> '주소1' => replacement_accents(<span>$order</span>->delivery['street_address'] != '' ? <span>$order</span>->delivery['street_address'] : <span>$order</span> ->결제['street_address']),
<span>497</span> '도시' => replacement_accents(<span>$order</span>->delivery['city'] != '' ? <span>$order</span>->delivery['city'] : <span>$order</span> ->결제['도시']),
<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['국가']['id'], <span>$order</span>->billing['zone_id'], <span>$order</span>->billing['state'] )),
<span>499</span> 'zip' => (<span>$order</span>->delivery['postcode'] != '' ? <span>$order</span>->delivery['postcode'] : <span>$order</span>- >결제['우편번호']),
<span>500</span> '국가' => (<span>$order</span>->delivery['국가']['title'] != '' ? <span>$order</span>->배송['국가']['제목'] : <span>$주문</span>->결제['국가']['제목']),
<span>501</span> '국가 코드' => (<span>$order</span>->delivery['country']['iso_code_2'] != '' ? <span>$order</span>->delivery['country']['iso_code_2'] : <span>$order</span>->billing['country']['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['suburb'] != '') <span>$optionsCust</span>[' address2'] = <span>$order</span>->배달['교외'<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>->delivery['postcode'], 0, 3) . '-' . <span>substr</span>(<span>$order</span>->배달['우편번호'], 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 == '예 ') <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>['배송'<span>]);
</span><span>517</span><span> }
</span><span>518</span><span>설정 해제</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>참</span>) <span>$optionsLineItems</span> = <span>배열</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>설정 해제</span>(<span>$optionsLineItems</span>['creditsExist'<span>]);
</span><span>525</span><span> }</span><span>526</span><span>$optionsAggregate</span> = <span>배열</span><span>(
</span><span>527</span> 'cmd' => '_ext-enter',
<span>528</span> 'item_name' => 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>숫자_형식</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>->products) > 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> 항목 정보가 유효하지 않은 경우 집계 사용:</span><span>545</span><span>if</span> (<span>sizeof</span>(<span>$optionsLineItems</span>) > 0) <span>$optionsAggregate</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>, <span>$optionsPhone</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 ($값);</span><span>562</span><span>563</span><span>$bu</span>
로그인 후 복사
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿