function DoReferenceTransaction($billing_agreement_id) { global $order, $order_total_modules; global $currencies; $method = "DoReferenceTransaction"; $parm = ""; $parm .= "&REFERENCEID=" . $billing_agreement_id; // 送付先 $parm .= "&SHIPTONAME=" . paypal_esacpe_parm($order->delivery['firstname'] . ' ' . $order->delivery['lastname']); $parm .= "&SHIPTOSTREET=" . paypal_esacpe_parm($order->delivery['street_address']); $parm .= "&SHIPTOSTREET2=" . paypal_esacpe_parm($order->delivery['suburb']); $parm .= "&SHIPTOCITY=" . paypal_esacpe_parm($order->delivery['city']); $parm .= "&SHIPTOSTATE=" . paypal_esacpe_parm($order->delivery['state']); $parm .= "&SHIPTOZIP=" . paypal_esacpe_parm($order->delivery['postcode']); $parm .= "&SHIPTOCOUNTRYCODE=" . paypal_esacpe_parm($order->delivery['country']['iso_code_2']); $parm .= "&SHIPTOPHONENUM=" . paypal_esacpe_parm($order->delivery['telephone']); // 通貨 if (MODULE_PAYMENT_PAYPAL_EC_CURRENCY == 'USER') { $amt = paypal_get_ot_total($order, $order_total_modules); $currency = $_SESSION['currency']; } else { $amt = paypal_get_ot_total($order, $order_total_modules, false); $currency = MODULE_PAYMENT_PAYPAL_EC_CURRENCY; $amt = number_format(paypal_convert_money_string($amt) * $currencies->get_value($currency), $currencies->get_decimal_places($currency)); $amt = paypal_convert_money_string($amt); } // 金額 // $tax = paypal_get_ot_tax($order, $order_total_modules); $parm .= "&AMT=" . $amt; $parm .= "&CURRENCYCODE=" . paypal_esacpe_parm($currency); // $parm .= "&ITEMAMT=".(paypal_get_ot_subtotal($order, $order_total_modules)-$tax); // $parm .= "&SHIPPINGAMT=".paypal_get_ot_shipping($order, $order_total_modules); // $parm .= "&HANDLINGAMT=".paypal_get_ot_loworderfee($order, $order_total_modules); // $parm .= "&SHIPDISCAMT=".paypal_get_ot_coupon($order, $order_total_modules); // $parm .= "&TAXAMT=".$tax; $parm .= "&PAYMENTACTION=" . MODULE_PAYMENT_PAYPAL_EC_SETTLEMENT_TYPE; $parm .= "&L_PAYMENTREQUEST_0_NAME0=" . paypal_esacpe_parm(MODULE_PAYMENT_PAYPAL_TEXT_ITEMNAME); $parm .= "&L_PAYMENTREQUEST_0_AMT0=" . $amt; $parm .= "&L_PAYMENTREQUEST_0_QTY0=1"; // 商品情報 // $no = 0; // foreach($order->products as $product) { // $tax = 0;//$product['final_price']*$product['tax']/100; // $parm .= "&L_NAME".$no."=".paypal_esacpe_parm($product['name']); // $parm .= "&L_AMT".$no."=".($product['final_price']+$tax); // $parm .= "&L_NUMBER".$no."=".paypal_esacpe_parm($product['model']); // $parm .= "&L_QTY".$no."=".$product['qty']; // $no++; // } // API呼び出し $resArray = paypal_hash_call($method, $parm); $ack = strtoupper($resArray["ACK"]); if ($ack == "SUCCESS") { // do nothing } else { global $messageStack; $messageStack->add_session('checkout_payment', $resArray['L_LONGMESSAGE0'], 'error'); zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, "", "SSL")); exit; } }
/** * Build the data and actions to process when the "Submit" button is pressed on the order-confirmation screen. * This sends the data to the payment gateway for processing. * (These are hidden fields on the checkout confirmation page) * * @return string */ function process_button() { global $db, $order, $currencies, $currency, $order_total_modules; $sql = "INSERT INTO " . TABLE_PAYPAL_SESSION . " (session_id,saved_session,expiry)" . " VALUES (:session_id,:saved_session,:expiry)"; $sql = $db->bindVars($sql, ':session_id', zen_session_id(), 'string'); $sql = $db->bindVars($sql, ':saved_session', '', 'string'); $sql = $db->bindVars($sql, ':expiry', time() + 1 * 60 * 60 * 24 * 2, 'integer'); $db->Execute($sql); $paypal_session_unique_id = $db->Insert_ID(); $custom = $paypal_session_unique_id . '-' . md5($paypal_session_unique_id . MODULE_PAYMENT_PAYPAL_WPP_CUSTOM_KEY); if (MODULE_PAYMENT_PAYPAL_WPP_TEST == 'True') { $paypalUrl = 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_hosted-payment'; } else { $paypalUrl = 'https://www.paypal.com/cgi-bin/webscr?cmd=_hosted-payment'; } if (MODULE_PAYMENT_PAYPAL_WPP_CURRENCY == 'User Selected Currency') { $amt = paypal_get_ot_total($order, $order_total_modules); $currency = $_SESSION['currency']; } else { $amt = paypal_get_ot_total($order, $order_total_modules, false); $currency = MODULE_PAYMENT_PAYPAL_WPP_CURRENCY; $amt = number_format(paypal_convert_money_string($amt) * $currencies->get_value($currency), $currencies->get_decimal_places($currency)); $amt = paypal_convert_money_string($amt); } $_SESSION['paypal_session_unique_id'] = $paypal_session_unique_id; $_SESSION['paypal_subtotal'] = $amt; $_SESSION['paypal_currency'] = $currency; $sql = "UPDATE " . TABLE_PAYPAL_SESSION . " SET saved_session=:saved_session" . " WHERE unique_id='" . (int) $paypal_session_unique_id . "'"; $sql = $db->bindVars($sql, ':saved_session', base64_encode(serialize($_SESSION)), 'string'); $db->Execute($sql); $billing_country = ''; if (strcasecmp($order->billing['country']['title'], 'Japan') === 0) { $billing_country = 'JP'; } $delivery_country = ''; if (strcasecmp($order->delivery['country']['title'], 'Japan') === 0) { $delivery_country = 'JP'; } $process_button_string = zen_draw_hidden_field('business', MODULE_PAYMENT_PAYPAL_WPP_MERCHANT_ID) . zen_draw_hidden_field('subtotal', $amt) . zen_draw_hidden_field('currency_code', $currency) . zen_draw_hidden_field('buyer_email', $order->customer['email_address']) . zen_draw_hidden_field('billing_country', $billing_country) . zen_draw_hidden_field('billing_zip', str_replace('-', '', $order->billing['postcode'])) . zen_draw_hidden_field('billing_state', $order->billing['state']) . zen_draw_hidden_field('billing_city', $order->billing['city']) . zen_draw_hidden_field('billing_address1', $order->billing['street_address']) . zen_draw_hidden_field('billing_address2', $order->billing['suburb']) . zen_draw_hidden_field('billing_last_name', $order->billing['firstname']) . zen_draw_hidden_field('billing_first_name', $order->billing['lastname']) . zen_draw_hidden_field('country', $delivery_country) . zen_draw_hidden_field('zip', str_replace('-', '', $order->delivery['postcode'])) . zen_draw_hidden_field('state', $order->delivery['state']) . zen_draw_hidden_field('city', $order->delivery['city']) . zen_draw_hidden_field('address1', $order->delivery['street_address']) . zen_draw_hidden_field('address2', $order->delivery['suburb']) . zen_draw_hidden_field('last_name', $order->delivery['firstname']) . zen_draw_hidden_field('first_name', $order->delivery['lastname']) . zen_draw_hidden_field('custom', $custom) . zen_draw_hidden_field('return', zen_href_link(FILENAME_CHECKOUT_SUCCESS_PAYPAL_IPN_WAITING, '', 'SSL')) . zen_draw_hidden_field('paymentaction', MODULE_PAYMENT_PAYPAL_WPP_SETTLEMENT_TYPE) . zen_draw_hidden_field('cancel_return', zen_href_link(FILENAME_CHECKOUT_CONFIRMATION, '', 'SSL')) . zen_draw_hidden_field('paypal_url', $paypalUrl); return $process_button_string; }