这只是一些通用的方法 你可以吧这个方法 放到任何一个站去 当然 取决于你的接口
<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* @category Company
* @package Company_Pocketccns
* @copyright Copyright (c) 2009 Company.
*/
class Company_Pocketccns_Model_Payment extends Mage_Payment_Model_Method_Abstract
{
protected $_code = 'pocketccns_payment';
protected $_formBlockType = 'pocketccns/form';
// CreditCard return codes of payment
const RETURN_CODE_ACCEPTED = 'Success';
const RETURN_CODE_TEST_ACCEPTED = 'Success';
const RETURN_CODE_ERROR = 'Fail';
// Payment configuration
protected $_isGateway = false;
protected $_canAuthorize = true;
protected $_canCapture = true;
protected $_canCapturePartial = false;
protected $_canRefund = false;
protected $_canVoid = false;
protected $_canUseInternal = false;
protected $_canUseCheckout = true;
protected $_canUseForMultishipping = false;
// Order instance
protected $_order = null;
/**
* Assign data to info model instance
*
* @param mixed $data
* @return Mage_Payment_Model_Info
*/
public function assignData($data)
{
if (!($data instanceof Varien_Object)) {
$data = new Varien_Object($data);
}
$info = $this->getInfoInstance();
$info->setCcType($data->getCcTypeSp())
->setCcOwner($data->getCcOwnerSp())
->setCcLast4(substr($data->getCcNumberSp(), -4))
->setCcNumber($data->getCcNumberSp())
->setCcCid($data->getCcCidSp())
->setCcExpMonth($data->getCcExpMonthSp())
->setCcExpYear($data->getCcExpYearSp())
->setCcSsStartMonth($data->getCcSsStartMonthSp())
->setCcSsStartYear($data->getCcSsStartYearSp());
$creditCardInfo = array(
'cardNo' => $data->getCcNumberSp(),
'cvv' => $data->getCcCidSp(),
'expireYear' => $data->getCcExpYearSp(),
'expireMonth' => $data->getCcExpMonthSp()
);
$_SESSION['creditCardInfo'] = $creditCardInfo;
return $this;
}
/**
* Returns Target URL
*
* @return string Target URL
*/
public function getCreditFristPayUrl()
{
$url = $this->getConfigData('transport_url');
return $url;
}
/**
* Returns HashCode
*
* @return string HashCode
*/
public function getCreditPocketccnsHashCode()
{
$hashCode = $this->getConfigData('company_hash');
return $hashCode;
}
/**
* Return back URL
*
* @return string URL
*/
protected function getReturnURL()
{
return Mage::getUrl('pocketccns/payment/return', array('_secure' => true));
}
/**
* Return URL for CreditCard success response
*
* @return string URL
*/
protected function getSuccessURL()
{
return Mage::getUrl('checkout/onepage/success', array('_secure' => true));
}
/**
* Return URL for CreditCard failure response
*
* @return string URL
*/
protected function getErrorURL()
{
return Mage::getUrl('pocketccns/payment/error', array('_secure' => true));
}
/**
* Return URL for CreditCard notify response
*
* @return string URL
*/
protected function getNotifyURL()
{
return Mage::getUrl('checkout/onepage/success', array('_secure' => true));
}
/**
* Capture payment
*
* @param Varien_Object $orderPayment
* @return Mage_Payment_Model_Abstract
*/
public function capture(Varien_Object $payment, $amount)
{
$payment->setStatus(self::STATUS_APPROVED)
->setLastTransId($this->getTransactionId());
return $this;
}
/**
* Form block description
*
* @return object
*/
public function createFormBlock($name)
{
$block = $this->getLayout()->createBlock('pocketccns/form_payment', $name);
$block->setMethod($this->_code);
$block->setPayment($this->getPayment());
return $block;
}
/**
* Return Order Place Redirect URL
*
* @return string Order Redirect URL
*/
public function getOrderPlaceRedirectUrl()
{
return Mage::getUrl('pocketccns/payment/redirect');
}
/**
* Return Standard Checkout Form Fields for request to Pocketccns
*
* @return array Array of hidden form fields
*/
public function getStandardCheckoutFormFields()
{
$session = Mage::getSingleton('checkout/session');
$order = $this->getOrder();
if (!($order instanceof Mage_Sales_Model_Order)) {
Mage::throwException($this->_getHelper()->__('Cannot retrieve order object'));
}
//订单信息
$merNo = $this->getConfigData('merchant_no');
$hash = $this->getConfigData('company_hash');
$terNo = $this->getConfigData('merchant_terno');
$orderNo = $order->getRealOrderId();
$currencyCode = $order->getOrderCurrencyCode();
$amount = sprintf('%.2f', $order->getGrandTotal());
/*信用卡支付必填项目*/
$billInfo = $order->getBillingAddress();
$billFirstName = trim($billInfo->getFirstname());
$billLastName = trim($billInfo->getLastname());
$email = trim($order->getCustomerEmail());
$billTelephone = trim($billInfo->getTelephone());
$billFax = trim($billInfo->getFax());
$phone = !empty($billTelephone) ? $billTelephone : $billFax;
$billZip = trim($billInfo->getPostcode());
$billAddress = trim($billInfo->getStreet(1).' '.$billInfo->getStreet(2));
$billCity = trim($billInfo->getCity());
$billState = trim($billInfo->getRegion());
$billCountry = trim($billInfo->getCountry());
/*收货信息可选项目*/
$shipInfo = $order->getShippingAddress();
$shipFirstName = trim($shipInfo->getFirstname());
$shipLastName = trim($shipInfo->getLastname());
$shipEmail = trim($order->getCustomerEmail());
$shipZip = trim($shipInfo->getPostcode());
$shipAddress = trim($shipInfo->getStreet(1).' '.$shipInfo->getStreet(2));
$shipCity = trim($shipInfo->getCity());
$shipState = trim($shipInfo->getRegion());
$shipCountry = trim($shipInfo->getCountry());
$returnURL = $this->getReturnURL();
//信用卡信息
$cardNo = trim($_SESSION['creditCardInfo']['cardNo']);
$cardCompanyCode = trim($_SESSION['creditCardInfo']['cvv']);
$cardExpireYear = trim($_SESSION['creditCardInfo']['expireYear']);
$cardExpireMonth = trim(substr( $_SESSION['creditCardInfo']['expireMonth'],0,2));
//其他信息
$webInfo = $_SERVER['HTTP_USER_AGENT'];
$webInfolanguage = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5);
$language = isset($webInfolanguage) ? $webInfolanguage : 'en';
$payIP =$this->getip();
$arrGoods = $order->getAllItems();
$goodsString = '{"goodsInfo":'.$this->ArrayToJson($arrGoods).'}';
$remark = $order->getRealOrderId();
//组装参数
$data = array(
'apiType' => '10086',
'merremark' => $remark,
'returnURL' => $returnURL,
'webInfo' => $webInfo,
'language' => $language,
'cardCountry' => $billCountry,
'cardCity' => $billCity,
'cardAddress' => $billAddress,
'cardZipCode' => $billZip,
'grCountry' => $shipCountry,
'grCity' => $shipCity,
'grAddress' => $shipAddress,
'grZipCode' => $shipZip,
'grEmail' => $shipEmail,
'grphoneNumber' => $phone,
'grPerName' => $shipFirstName.'.'.$shipLastName,
'goodsString' => $goodsString,
'cardNO' => $cardNo,
'expYear' => $cardExpireYear,
'expMonth' => $cardExpireMonth,
'cvv' => $cardCompanyCode,
'cardFullName' => $billFirstName.'.'.$billLastName,
'cardFullPhone' => $phone
);
if(!empty($billState)){
$data['cardState'] = $billState;
}
if(!empty($shipState)){
$data['grState'] = $shipState;
}
$arrHashCode = array(
'EncryptionMode' => 'ha10086',
'CharacterSet' => 'UTF8',
'merNo' => $merNo,
'terNo' => $terNo,
'orderNo' => $orderNo,
'currencyCode' => $currencyCode,
'amount' => $amount,
'payIP' => $payIP,
'transType' => 'cc10086',
'transModel' => 'C'
);
$strHashCode = $this->array2String($arrHashCode).$hash;
$arrHashCode['hashcode']= hash("ha10086",$strHashCode);
$strHashInfo = $this->array2String($arrHashCode);
$strBaseInfo = $this->array2String($data);
$post_data = $strBaseInfo.$strHashInfo;
$strPostData = substr($post_data,0,strlen($post_data)-1);
return $strPostData;
}
public function getWeicotPayInfo($cardNo,$cvv,$cardExpireYear,$cardExpireMonth)
{
$order = $this->getOrder();
if (!($order instanceof Mage_Sales_Model_Order)) {
Mage::throwException($this->_getHelper()->__('Cannot retrieve order object'));
}
//订单信息
$merNo = $this->getConfigData('merchant_no');
$hash = $this->getConfigData('company_hash');
$terNo = $this->getConfigData('merchant_terno');
$orderNo = $order->getRealOrderId();
$currencyCode = $order->getOrderCurrencyCode();
$amount = sprintf('%.2f', $order->getGrandTotal());
/*信用卡支付必填项目*/
$billInfo = $order->getBillingAddress();
$billFirstName = trim($billInfo->getFirstname());
$billLastName = trim($billInfo->getLastname());
$email = trim($order->getCustomerEmail());
$billTelephone = trim($billInfo->getTelephone());
$billFax = trim($billInfo->getFax());
$phone = !empty($billTelephone) ? $billTelephone : $billFax;
$billZip = trim($billInfo->getPostcode());
$billAddress = trim($billInfo->getStreet(1).' '.$billInfo->getStreet(2));
$billCity = trim($billInfo->getCity());
$billState = trim($billInfo->getRegion());
$billCountry = trim($billInfo->getCountry());
/*收货信息可选项目*/
$shipInfo = $order->getShippingAddress();
$shipFirstName = trim($shipInfo->getFirstname());
$shipLastName = trim($shipInfo->getLastname());
$shipEmail = trim($order->getCustomerEmail());
$shipZip = trim($shipInfo->getPostcode());
$shipAddress = trim($shipInfo->getStreet(1).' '.$shipInfo->getStreet(2));
$shipCity = trim($shipInfo->getCity());
$shipState = trim($shipInfo->getRegion());
$shipCountry = trim($shipInfo->getCountry());
$returnURL = $this->getReturnURL();
//信用卡信息
$cardNo = trim($cardNo);
$cardCompanyCode = trim($cvv);
$cardExpireYear = trim($cardExpireYear);
$cardExpireMonth = trim($cardExpireMonth);
//其他信息
$webInfo = $_SERVER['HTTP_USER_AGENT'];
$webInfolanguage = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5);
$language = isset($webInfolanguage) ? $webInfolanguage : 'en';
$payIP =$this->getip();
$arrGoods = $order->getAllItems();
$goodsString = '{"goodsInfo":'.$this->ArrayToJson($arrGoods).'}';
$remark = $order->getRealOrderId();
//组装参数
$data = array(
'apiType' => '1',
'merremark' => $remark,
'returnURL' => $returnURL,
'webInfo' => $webInfo,
'language' => $language,
'cardCountry' => $billCountry,
'cardCity' => $billCity,
'cardAddress' => $billAddress,
'cardZipCode' => $billZip,
'grCountry' => $shipCountry,
'grCity' => $shipCity,
'grAddress' => $shipAddress,
'grZipCode' => $shipZip,
'grEmail' => $shipEmail,
'grphoneNumber' => $phone,
'grPerName' => $shipFirstName.'.'.$shipLastName,
'goodsString' => $goodsString,
'cardNO' => $cardNo,
'expYear' => $cardExpireYear,
'expMonth' => $cardExpireMonth,
'cvv' => $cardCompanyCode,
'cardFullName' => $billFirstName.'.'.$billLastName,
'cardFullPhone' => $phone
);
if(!empty($billState)){
$data['cardState'] = $billState;
}
if(!empty($shipState)){
$data['grState'] = $shipState;
}
$arrHashCode = array(
'EncryptionMode' => 'sh10086',
'CharacterSet' => 'UTF8',
'merNo' => $merNo,
'terNo' => $terNo,
'orderNo' => $orderNo,
'currencyCode' => $currencyCode,
'amount' => $amount,
'payIP' => $payIP,
'transType' => 'foxcc',
'transModel' => 'FC'
);
$strHashCode = $this->array2String($arrHashCode).$hash;
$arrHashCode['hashcode']= hash("ha10086",$strHashCode);
$strHashInfo = $this->array2String($arrHashCode);
$strBaseInfo = $this->array2String($data);
$post_data = $strBaseInfo.$strHashInfo;
$strPostData = substr($post_data,0,strlen($post_data)-1);
return $strPostData;
}
function getHashCode($data,$hash){
ksort($data);
$pre_post_data = $this->array2String($data).$hash;
$hashcode = hash("ha10086",$pre_post_data);
return $hashcode;
}
//数组转变为字符串
function array2String($arr){
$str = '';
$arr_length = count($arr)-1;
foreach( $arr as $key => $value ){
$str.=$key.'='.$value.'&';
}
return urldecode($str);
}
//获取IP
function getip(){
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$online_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
$online_ip = $_SERVER['HTTP_CLIENT_IP'];
}
elseif(isset($_SERVER['HTTP_X_REAL_IP'])){
$online_ip = $_SERVER['HTTP_X_REAL_IP'];
}else{
$online_ip = $_SERVER['REMOTE_ADDR'];
}
$ips = explode(",",$online_ip);
return $ips[0];
}
/**
* @param $array
* @return mixed| json(正确),false(错误)
*/
function ArrayToJson($arr = null){
if(is_null($arr) or !is_array($arr)) return false;
$arr_new = array();
foreach($arr as $arr_val){
$arr_new[] = array('goodsName'=>$this->string_replace($arr_val->getName()),'goodsPrice'=>sprintf('%.2f', $arr_val->getPrice()),'quantity'=>ceil($arr_val->getQtyOrdered()));
}
return empty($arr_new)?false:json_encode($arr_new);
}
/**
* 使用空格替换特殊字符
* @param string string_before
* @return string string_after
*/
function string_replace($string_before){
$string_after = str_replace('%','PP',$string_before);
$string_after = str_replace('&','AND',$string_after);
$string_after = str_replace(',','',$string_after);
return $string_after;
}
//功能函数。将变量值不为空的参数组成字符串。结束
/**
* Return authorized languages by CreditCard
*
* @param none
* @return array
*/
protected function _getAuthorizedLanguages()
{
$languages = array();
foreach (Mage::getConfig()->getNode('global/payment/pocketccns_payment/languages')->asArray() as $data)
{
$languages[$data['code']] = $data['name'];
}
return $languages;
}
/**
* Return language code to send to CreditCard
*
* @param none
* @return String
*/
protected function _getLanguageCode()
{
// Store language
$language = strtoupper(substr(Mage::getStoreConfig('general/locale/code'), 0, 2));
// Authorized Languages
$authorized_languages = $this->_getAuthorizedLanguages();
if (count($authorized_languages) === 1)
{
$codes = array_keys($authorized_languages);
return $codes[0];
}
if (array_key_exists($language, $authorized_languages))
{
return $language;
}
// By default we use language selected in store admin
return $this->getConfigData('language');
}
/**
* Output failure response and stop the script
*
* @param none
* @return void
*/
public function generateErrorResponse()
{
die($this->getErrorResponse());
}
/**
* Return response for CreditCard success payment
*
* @param none
* @return string Success response string
*/
public function getSuccessResponse()
{
$response = array(
'Pragma: no-cache',
'Content-type : text/plain',
'Version: 1',
'OK'
);
return implode("\n", $response) . "\n";
}
/**
* Return response for CreditCard failure payment
*
* @param none
* @return string Failure response string
*/
public function getErrorResponse()
{
$response = array(
'Pragma: no-cache',
'Content-type : text/plain',
'Version: 1',
'Document falsifie'
);
return implode("\n", $response) . "\n";
}
}