source: branches/version-1/data/downloads/module/mdl_cybs/mdl_cybs.inc @ 17246

Revision 17246, 12.1 KB checked in by adachi, 16 years ago (diff)

サイバーソース決済モジュール暫定コミット

Line 
1<?php
2/**
3 * ¥µ¥¤¥Ð¡¼¥½¡¼¥¹¥â¥¸¥å¡¼¥ë¤Ç¶¦ÄÌ»ÈÍѤ¹¤ëÄê¿ô¡¦ÇÛÎ󡦴ؿô·²
4 *
5 */
6require_once MODULE_PATH . "mdl_cybs/class/mdl_cybs_config.php";
7require_once MODULE_PATH . "mdl_cybs/class/mdl_cybs_request.php";
8
9/**
10 * dtb_order memo»ÅÍÍ
11 * memo06 Í¿¿®¥¹¥Æ¡¼¥¿¥¹ $arrCybsAuthStatus»²¾È
12 * memo07 request_token
13 * memo08 request_id
14 * memo09 »Ùʧ¤¤ÊýË¡¤Î¥­¡¼Ì¾ $arrCybsPayMethod»²¾È
15 * memo10 ÊÖ¶â¼Â¹ÔºÑ¤ß¥Õ¥é¥° 1:¼Â¹ÔºÑ¤ß¡¢1°Ê³°:̤¼Â¹Ô
16 */
17
18// ¥â¥¸¥å¡¼¥ëÈÖ¹æ
19define('MDL_CYBS_ID', 14);
20
21// ¥í¥°¥Ñ¥¹
22define('MDL_CYBS_LOG', DATA_PATH . 'logs/cybs.log');
23
24// ³ÈÄ¥¥â¥¸¥å¡¼¥ë̾
25define('MDL_CYBS_MOD_CYBS', 'mod_cybs');
26
27// ¥µ¥Ö¥¹¥¯¥ê¥×¥·¥ç¥óIDÅÐÏ¿¿ô¾å¸Â
28define('MDL_CYBS_SUBS_ID_MAX', 5);
29
30/**
31 * mod_cybs¤ò¥í¡¼¥É¤¹¤ë
32 *
33 * @return boolean
34 */
35function sfCybsLoadModCybs() {
36    if (!extension_loaded(MDL_CYBS_MOD_CYBS)) {
37        if (@!dl(MDL_CYBS_MOD_CYBS . ".so")) {
38            return false;
39        }
40    }
41    return true;
42}
43
44// ËÜÈÖURL
45define('MDL_CYBS_REQUEST_URL', 'ics2.ic3.com');
46// ¥Æ¥¹¥ÈURL
47define('MDL_CYBS_REQUEST_URL_TEST', 'ics2test.ic3.com');
48
49// ICS¥¨¥é¡¼
50$arrCybsIcsErr = array(
51    'DCALL' => '¥«¡¼¥É²ñ¼Ò¤¬Í¿¿®È½Äê¤ò¼è¤ê¾Ã¤·¤Þ¤·¤¿¡£',
52    'DCARDEXPIRED' => '¥«¡¼¥É¤ÎÍ­¸ú´ü¸ÂÀÚ¤ì¤Ç¤¹¡£',
53    'DCARDREFUSED' => '¥«¡¼¥É²ñ¼Ò¤¬Í¿¿®¤ò¾µÇ§¤·¤Þ¤»¤ó¤Ç¤·¤¿¡£',
54    'DINVALIDCARD' => '¥¯¥ì¥¸¥Ã¥È¥«¡¼¥ÉÈֹ椬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó¡£',
55    'DINVALIDDATA' => '¥ê¥¯¥¨¥¹¥È¤Ë´Þ¤Þ¤ì¤ë¥Ç¡¼¥¿¤¬ÉÔÀµ¤Ç¤¹¡£',
56    'DMISSINGFIELD' => '¥ê¥¯¥¨¥¹¥È¤Ëɬ¿Ü¥Õ¥£¡¼¥ë¥É¤¬·ç¤±¤Æ¤¤¤Þ¤¹¡£',
57    'ESYSTEM' => '¥·¥¹¥Æ¥à¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£',
58    'ETIMEOUT' => '¥ê¥¯¥¨¥¹¥È¤¬¥¿¥¤¥à¥¢¥¦¥È¤·¤Þ¤·¤¿¡£',
59);
60
61// ¥ê¥¯¥¨¥¹¥ÈÀèURLÇÛÎó
62$arrCybsRequestURL = array(
63    '1' => MDL_CYBS_REQUEST_URL_TEST,
64    '2' => MDL_CYBS_REQUEST_URL
65);
66
67/**
68 *  »Ùʧ¤¤ÊýË¡
69 *  array(
70 *      '[»Ùʧ¤¤ÊýË¡]-[ʬ³ä²ó¿ô]' => '»Ùʧ¤¤Êýˡ̾¾Î¡¦Ê¬³ä²ó¿ô',
71 *      '[»Ùʧ¤¤ÊýË¡]-[ʬ³ä²ó¿ô]' => '»Ùʧ¤¤Êýˡ̾¾Î¡¦Ê¬³ä²ó¿ô',
72 *      ...
73 *  );
74 */
75$arrCybsPayMethod = array(
76    '1-0' => "°ì³çʧ¤¤",
77    '4-3' => "ʬ³ä3²óʧ¤¤",
78    '4-6' => "ʬ³ä6²óʧ¤¤",
79    '4-10'=> "ʬ³ä10²óʧ¤¤",
80    '4-15'=> "ʬ³ä15²óʧ¤¤",
81    '4-20'=> "ʬ³ä20²óʧ¤¤",
82    '5-0' => "¥ê¥Ü¥ë¥Ó¥ó¥°Ê§¤¤"
83);
84
85// ¥«¡¼¥É²ñ¼Ò¤Î¼ïÎà
86$arrCybsCardCompany = array(
87    '001' => 'Visa',
88    '002' => 'MasterCard',
89    '003' => 'American Express',
90    '004' => 'Discover',
91    '005' => 'Diners Club',
92    '006' => 'Carte Blanche',
93    '007' => 'JCB',
94    '008' => 'Optima',
95    '010' => 'Benificial Private Label',
96    '014' => 'EnRoute',
97    '017' => 'MBNA',
98    '021' => 'JAL',
99    '027' => 'Nicos',
100);
101
102// Í¿¿®¥¹¥Æ¡¼¥¿¥¹
103define('MDL_CYBS_AUTH_STATUS_AUTH',       '1'); // Í¿¿®
104define('MDL_CYBS_AUTH_STATUS_AUTHCANCEL', '2'); // Í¿¿®¼è¤ê¾Ã¤·
105define('MDL_CYBS_AUTH_STATUS_CAPTURE',    '3'); // Çä¾å
106define('MDL_CYBS_AUTH_STATUS_RETURN',     '4'); // ÊÖ¶â
107$arrCybsAuthStatus = array(
108    MDL_CYBS_AUTH_STATUS_AUTH       => 'Í¿¿®',
109    MDL_CYBS_AUTH_STATUS_AUTHCANCEL => 'Í¿¿®¼è¾Ã',
110    MDL_CYBS_AUTH_STATUS_CAPTURE    => 'Çä¾å',
111    MDL_CYBS_AUTH_STATUS_RETURN     => 'ÊÖ¶â'
112);
113
114// ´ÉÍý²èÌ̤Ǽ¹Ԥ¹¤ëICS¥¢¥×¥ê¥±¡¼¥·¥ç¥ó
115define('MDL_CYBS_APP_REVERSAL', '1');
116define('MDL_CYBS_APP_BILL',     '2');
117define('MDL_CYBS_APP_CREDIT',   '3');
118$arrCybsApp = array(
119    MDL_CYBS_APP_REVERSAL => 'ics_auth_reversal',
120    MDL_CYBS_APP_BILL     => 'ics_bill',
121    MDL_CYBS_APP_CREDIT   => 'ics_credit'
122);
123
124/**
125 * ¥µ¥¤¥Ð¡¼¥½¡¼¥¹¤Ë¥ê¥¯¥¨¥¹¥È¤òÁ÷¿®¤¹¤ë.
126 * °ú¿ô¤ÎÁ÷¿®¥Ñ¥é¥á¡¼¥¿¤Ïlf(sf)CreateParam***()¤ÇÀ¸À®¤¹¤ë.
127 *
128 * @param array $arrSendParam
129 * @return array
130 */
131function sfCybsSendRequest($arrSendParam) {
132    $objRequest = new CYBS_REQ;
133
134    foreach ($arrSendParam as $key => $value) {
135        $objRequest->add_request($key, $value);
136    }
137
138    // ¥«¡¼¥ÉÈÖ¹æ¤Ï¥í¥°Êݸ¤·¤Ê¤¤
139    if (isset($arrSendParam['customer_cc_number'])) {
140        $arrSendParam['customer_cc_number'] = '****';
141    }
142
143    gfPrintLog('### send request param ###', MDL_CYBS_LOG);
144    gfPrintLog(print_r($arrSendParam, true), MDL_CYBS_LOG);
145
146    if ( ($result = cybs_send($objRequest->requests)) == false ) {
147        sfDispSiteError('');
148        gfPrintLog(' -> error: cybs_send() function.' , MDL_CYBS_LOG);
149    }
150
151    return $result;
152}
153
154/**
155 * ¥ì¥¹¥Ý¥ó¥¹¤Î¥¨¥é¡¼¥Á¥§¥Ã¥¯
156 *
157 * @param array $arrResults
158 * @return boolean|PEAR::Error
159 */
160function sfCybsIsError($arrResults) {
161    global $arrCybsIcsErr;
162    $ret = null;
163
164    switch ($arrResults['ics_rcode']) {
165    // À®¸ù
166    case '1':
167        $ret = true;
168        break;
169    case '0':
170        // 3D¥»¥­¥å¥¢¤Î¾ì¹ç¡¢ics_rflag¤¬DAUTHENTICATE¤Ç¤¢¤ì¤ÐÅÐÏ¿¤¢¤ê
171        if (isset($arrResults['pa_enroll_rflag'])
172            && $arrResults['pa_enroll_rflag'] == 'DAUTHENTICATE') {
173
174            $ret = true;
175            break;
176        }
177        $msg = "½èÍý¤¬µñÈݤµ¤ì¤Þ¤·¤¿¡£ÆþÎÏÆâÍƤ˴ְ㤤¤¬¤Ê¤¤¤«¤´³Îǧ¤¯¤À¤µ¤¤¡£\n";
178        $rflag = $arrResults['ics_rflag'];
179        $err = isset($arrCybsIcsErr[$rflag]) ? $arrCybsIcsErr[$rflag] : "¥¨¥é¡¼¥³¡¼¥É¡§$rflag";
180        $ret = PEAR::raiseError($msg . $err);
181        break;
182    case '-1':
183        $msg = "¥·¥¹¥Æ¥à¤Þ¤¿¤Ï¥Í¥Ã¥È¥ï¡¼¥¯¥¨¥é¡¼¤Ë¤è¤ê½èÍý¤¬¥¨¥é¡¼¤È¤Ê¤ê¤Þ¤·¤¿¡£\n";
184        $rflag = $arrResults['ics_rflag'];
185        $err = isset($arrCybsIcsErr[$rflag]) ? $arrCybsIcsErr[$rflag] : "¥¨¥é¡¼¥³¡¼¥É¡§$rflag";
186        $ret = PEAR::raiseError($msg . $err);
187        break;
188    default:
189        $ret = PEAR::raiseError("ÉÔÌÀ¤Ê¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£\n");
190    }
191
192    return $ret;
193}
194
195/**
196 * ¼õÃíÊÔ½¸¥Ú¡¼¥¸¤Î¥Æ¥ó¥×¥ì¡¼¥ÈÀ©¸æ
197 *
198 * @param LC_Page $objPage
199 * @return LC_Page
200 */
201function sfCybsOrderPage($objPage) {
202    $objQuery = new SC_Query;
203    $moduleId = $objQuery->get('dtb_payment', 'module_id', 'payment_id = ?', array($objPage->arrDisp['payment_id']));
204    $objPage->cybs_disp = true;
205    if ($moduleId != MDL_CYBS_ID) {
206        $objPage->cybs_disp = false;
207        return $objPage;
208    }
209
210    if ($objPage->disp_mode) {
211        $objPage->cybs_disp = false;
212        return $objPage;
213    }
214
215    global $arrCybsAuthStatus;
216    $objPage->arrCybsAuthStatus = $arrCybsAuthStatus;
217
218
219    $arrMemo = $objQuery->select(
220        'memo06, memo07, memo08, memo09, memo10',
221        'dtb_order',
222        'order_id = ?',
223        array($objPage->tpl_order_id));
224
225    $objPage->arrCybsMemo = isset($arrMemo[0]) ? $arrMemo[0] : array();
226    return $objPage;
227}
228
229/**
230 * EC-CUBE¦¤ÎÍ¿¿®¥¹¥Æ¡¼¥¿¥¹¤òÊѹ¹¤¹¤ë
231 * ¥µ¥¤¥Ð¡¼¥½¡¼¥¹Â¦¤ÈÄÌ¿®¤Ï¹Ô¤ï¤Ê¤¤¡£Êѹ¹¤ÏEC-CUBE¦¤Î¤ß¡£
232 */
233function sfCybsChangeAuthStatus($objPage, $status) {
234    global $arrCybsAuthStatus;
235    if (empty($arrCybsAuthStatus[$status])) {
236        gfPrintLog('error: call sfCybsChangeAuthStatus()', MDL_CYBS_LOG);
237        sfDispError('');
238    }
239
240    $arrUpdate = array(
241        'memo06' => $status,
242        'update_date' => 'NOW()'
243    );
244    $objQuery = new SC_Query;
245    $objQuery->update('dtb_order', $arrUpdate, 'order_id = ?', array($objPage->tpl_order_id));
246
247    $objPage->cybs_result = "¥¹¥Æ¡¼¥¿¥¹¤ò" . $arrCybsAuthStatus[$status] . "¤ØÊѹ¹¤·¤Þ¤·¤¿¡£";
248    return $objPage;
249}
250
251/**
252 * ICS¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¼Â¹Ô
253 *
254 */
255function sfCybsDoIcsApplication($objPage, $ics_app) {
256    global $arrCybsApp;
257    if (empty($arrCybsApp[$ics_app])) {
258        gfPrintLog('error: call sfCybsDoIcsApplication() error', MDL_CYBS_LOG);
259        sfDispError('');
260    }
261
262    global $arrCybsRequestURL;
263
264    $objConfig =& Mdl_Cybs_Config::getInstanse();
265    $arrConfig = $objConfig->getConfig();
266
267    $objQuery = new SC_Query;
268    $arrOrder = $objQuery->select('*', 'dtb_order', 'order_id = ?', array($objPage->tpl_order_id));
269    $arrOrder = $arrOrder[0];
270
271    // ¶¦Ḁ̈ѥé¥á¡¼¥¿
272    $arrSendParam = array(
273        "server_host"         => $arrCybsRequestURL[$arrConfig['cybs_request_url']],
274        "server_port"         => "80",
275        'currency'            => 'JPY',
276        'merchant_id'         => $arrConfig['cybs_merchant_id'],
277        'merchant_ref_number' => $objPage->tpl_order_id,
278    );
279
280    $resultMessage = '';
281    $resultStatus  = '';
282
283    switch($arrCybsApp[$ics_app]) {
284    // Í¿¿®¼è¾Ã
285    case 'ics_auth_reversal':
286        $resultMessage = 'Í¿¿®¼è¾Ã½èÍý¤ÏÀ®¸ù¤·¤Þ¤·¤¿¡£';
287        $resultStatus = MDL_CYBS_AUTH_STATUS_AUTHCANCEL;
288        $arrSendParam['auth_request_token'] = $arrOrder['memo07'];
289        $arrSendParam['auth_request_id']    = $arrOrder['memo08'];
290        $arrSendParam['ics_applications']   = "ics_auth_reversal";
291        $arrSendParam["offer0"] = "amount:" . $arrOrder['payment_total'];
292        $arrResults = sfCybsSendRequest($arrSendParam);
293        break;
294
295    // Çä¾å
296    case 'ics_bill':
297        $resultMessage = 'Çä¾å½èÍý¤ÏÀ®¸ù¤·¤Þ¤·¤¿¡£';
298        $resultStatus = MDL_CYBS_AUTH_STATUS_CAPTURE;
299        $arrSendParam['auth_request_token'] = $arrOrder['memo07']; // request_token
300        $arrSendParam['auth_request_id']    = $arrOrder['memo08']; // request_id
301        $arrSendParam['ics_applications']   = "ics_bill";
302        $arrSendParam["offer0"] = "amount:" . $arrOrder['payment_total'];
303        list($method, $paytimes) = split("-", $arrOrder['memo09']); // paymethod 4-15 ¤Ê¤É
304        $arrSendParam['jpo_payment_method'] = $method;
305        if ($paytimes > 0) $arrSendParam['jpo_installments'] = $paytimes;
306        $arrResults = sfCybsSendRequest($arrSendParam);
307        break;
308
309    // Çä¾å¼è¾Ã
310    case 'ics_credit':
311        // ÊÖ¶â½èÍý¤¬¼Â¹ÔºÑ¤ß¤Ê¤é¥ê¥¯¥¨¥¹¥È¤òÁ÷¿®¤·¤Ê¤¤¡£
312        if ($arrOrder['memo10'] == '1') {
313            $objPage->cybs_result = '´û¤ËÊֶ⤵¤ì¤Æ¤¤¤Þ¤¹¡£';
314            return $objPage;
315        }
316        $resultMessage = 'ÊÖ¶â½èÍý¤ÏÀ®¸ù¤·¤Þ¤·¤¿¡£';
317        $resultStatus = MDL_CYBS_AUTH_STATUS_RETURN;
318        $arrSendParam['ics_applications']   = "ics_credit";
319        $arrSendParam['bill_request_token'] = $arrOrder['memo07']; // request_token
320        $arrSendParam['bill_request_id']    = $arrOrder['memo08']; // request_id
321        $arrSendParam["offer0"] = "amount:" . $arrOrder['payment_total'];
322        $arrResults = sfCybsSendRequest($arrSendParam);
323        break;
324    }
325
326    if (PEAR::isError($e = sfCybsIsError($arrResults))) {
327        $objPage->cybs_result = $e->getMessage();
328        gfPrintLog(" -> " . $arrCybsApp[$ics_app] . " error: " . $e->getMessage(), MDL_CYBS_LOG);
329        gfPrintLog(print_r($arrResults, true), MDL_CYBS_LOG);
330        $objPage->cybs_result = $e->getMessage();
331        return $objPage;
332    }
333
334    // request_token, request_id¤Î¹¹¿·
335    $arrUpdate = array(
336        'update_date' => 'NOW()',
337        'memo07' => $arrResults['request_token'],
338        'memo08' => $arrResults['request_id'],
339    );
340    // ÊÖ¶â½èÍýÀ®¸ù»þ¤ÏÊÖ¶âºÑ¤ß¥Õ¥é¥°¤òΩ¤Æ¤ë
341    if ($arrCybsApp[$ics_app] == 'ics_credit') {
342        $arrUpdate['memo10'] = '1';
343    }
344    $objQuery->update('dtb_order', $arrUpdate, 'order_id = ?', array($objPage->tpl_order_id));
345
346    $objPage = sfCybsChangeAuthStatus($objPage, $resultStatus);
347    $objPage->cybs_result = $resultMessage;
348    return $objPage;
349}
350
351/**
352 * Çä¾å¥Ð¥Ã¥ÁÍÑCSV¤Î¥À¥¦¥ó¥í¡¼¥É
353 *
354 */
355function sfCybsCSVDownload($where, $arrval) {
356    $objQuery = new SC_Query;
357    $objQuery->setoption('ORDER BY update_date DESC');
358    $arrOrder = $objQuery->select(
359        'order_id, payment_total, memo08 as req_id, memo07 as req_token',
360        'dtb_order',
361        $where,
362        $arrval);
363
364    $line = '';
365    $arrayOrder = is_array($arrOrder) ? $arrOrder : array();
366    foreach ($arrOrder as $order) {
367        $line .= implode(',', array(
368            $order['order_id'],
369            'JPY',
370            $order['payment_total'],
371            $order['req_id'],
372            $order['req_token'])) . ",,,,,,,\r\n";
373    }
374
375    $batchId = '';
376    $objQuery = new SC_Query;
377    if (DB_TYPE == 'pgsql') {
378        $batchId = $objQuery->nextval('dtb_cybs_batch_id', 'batch_id');
379    } elseif (DB_TYPE == 'mysql') {
380        $batchId = $batchId = $objQuery->get_auto_increment('dtb_cybs_batch_id');
381    }
382
383    $recordCount = count($arrayOrder);
384
385    $head1 = "batchID=$batchId,transactionType=capture,recordCount=$recordCount,,,,,,,,,\r\n";
386    $head2 = implode(',', array(
387        'merchantReferenceCode*',
388        'purchaseTotals_currency*',
389        'purchaseTotals_grandTotalAmount*',
390        'ccCaptureService_authRequestID*',
391        'ccCaptureService_authRequestToken',
392        'ccCaptureService_authType',
393        'ccCaptureService_verbalAuthCode',
394        'billTo_customerID',
395        'merchantDefinedData_field1',
396        'merchantDefinedData_field2',
397        'merchantDefinedData_field3',
398        'merchantDefinedData_field4')) . "\r\n";
399
400    $csvString = $head1 . $head2 . $line;
401    sfCSVDownload($csvString, 'cybs_capture');
402}
Note: See TracBrowser for help on using the repository browser.