www.gusucode.com > ShopEx481 & PHPWind 整合版码程序 > plugins/payment/pay.shouxin.php

    <?php
require('paymentPlugin.php');
class pay_shouxin extends paymentPlugin{

	var $name = '首信易在线支付';//
	var $logo = 'SHOUXIN';
	var $version = 20070615;
	var $charset = 'gb2312';
	var $submitUrl = 'http://pay.beijing.com.cn/prs/user_payment.checkit'; //  
	var $submitButton = 'http://img.alipay.com/pimg/button_alipaybutton_o_a.gif'; ##需要完善的地方
	var $supportCurrency = array("CNY"=>"0", "USD"=>"1");
	var $supportArea = array('AREA_CNY','AREA_USA');
	var $desc  = '';
	var $orderby = 11;
	var $head_charset = "gb2312";
    var $cur_trading = true;	//支持真实的外币交易

	function toSubmit($payment){
		$merId = $this->getConf($payment["M_OrderId"], 'member_id');
		$o=$this->system->loadModel('utility/charset');
		if ($payment['M_Currency']=="CNY"){
		}else{
			$this->submitUrl = "http://pay.beijing.com.cn/prs/e_user_payment.checkit";                    
		}
		$oid = date("Ymd",$payment["M_Time"])."-".$merId."-".$payment["M_OrderId"];
		$sourcedata = $o->utf2local($this->supportCurrency[$payment['M_Currency']].date("Ymd",$payment["M_Time"]).$payment["M_Amount"].$payment["R_Name"].$oid.$merId.$this->callbackUrl,'zh');
		$payment["P_Name"] = $payment["P_Name"]?$payment["P_Name"]:$payment["R_Name"];
		$return['version'] = "3.0";
		$return["v_oid"] = $oid;
		$return["v_mid"] = $merId;
		$return["v_rcvname"] = $payment["R_Name"];
		$return["v_rcvaddr"] = $payment["R_Address"];
		$return["v_rcvtel"]  = $payment["R_Telephone"];
		$return["v_rcvpost"] = $payment["R_PostCode"];
		$return["v_amount"]  = $payment["M_Amount"];
		$return["v_ymd"] = date("Ymd",$payment["M_Time"]);
		$return["v_orderstatus"] = "0";
		$return["v_ordername"] = $payment["P_Name"];
		$return["v_moneytype"] = $this->supportCurrency[$payment["M_Currency"]];
		$return["v_url"] = $this->callbackUrl; 
		$return["v_md5info"] = $this->shopex_hmac_md5($sourcedata,$this->getConf($payment["M_OrderId"], 'PrivateKey'));
		return $return;
	}

	function callback($in,&$paymentId,&$money,&$message){		
		$v_oid = $in["v_oid"];
		$v_amount = $in["v_amount"];
		$v_pmode = $in["v_pmode"];
		$v_pstatus = $in["v_pstatus"];
		$v_pstring = $in["v_pstring"];
		$v_md5info = $in["v_md5info"];
		$v_moneytype = $in["v_moneytype"];
		$v_md5money = $in["v_md5money"];
		$v_sign = $in["v_sign"];
		$tmp_order = explode("-",$v_oid);
		$paymentId = $tmp_order[2];
		$money = $v_amount;
		$ikey = $this->getConf($paymentId, 'PrivateKey');
		$md5str = $v_oid.$v_pstatus.$v_pstring.$v_pmode;
		$md5moneystr = $v_amount.$v_moneytype;
		$md5moneystring = $this->shopex_hmac_md5($md5moneystr,$ikey);
		$md5string = $this->shopex_hmac_md5($md5str,$ikey);
		if ($v_md5info == $md5string && $v_md5money == $md5moneystring){
			if ($v_pstatus == 20){				
				return PAY_SUCCESS;
			}else{
				$message = '交易失败';
				return PAY_FAILED;# 交易异常,Md5摘要认证错误
			}
		}else{
			$message = '交易异常,Md5摘要认证错误';
			return PAY_ERROR;# 交易失败
		}
	}

	function getfields(){
		return array(
				'member_id'=>array(
						'label'=>'客户号',
						'type'=>'string'
					),
				'PrivateKey'=>array(
						'label'=>'私钥',
						'type'=>'string'
				)
			);
	}

	function shopex_hmac_md5($data,$key){
        if (strlen($key) > 64) {
           $key =  pack('H32', md5($key));
        }
        if (strlen($key) < 64) {
            $key = str_pad($key, 64, chr(0));
        }
        
        $_ipad = (substr($key, 0, 64) ^ str_repeat(chr(0x36), 64));
        $_opad = (substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64));
		return md5($_opad . pack('H32', md5($_ipad . $data)));
	}

}
?>