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

    var $name = '易宝支付 (在线支付接口)';//
    var $logo = 'YEEPAY';
    var $version = 20070902;
    var $charset = 'gb2312';
    var $applyUrl = 'https://www.yeepay.com/selfservice/AgentService.action';
    var $submitUrl = 'https://www.yeepay.com/app-merchant-proxy/node'; //  
    var $submitButton = 'http://img.alipay.com/pimg/button_alipaybutton_o_a.gif'; ##需要完善的地方
    var $supportCurrency = array("CNY"=>"01");
    var $supportArea = array('AREA_CNY');
    var $desc = '';
    var $intro = '首批通过国家信息安全系统认证、获得企业信用等级AAA级证书、注册资本1亿元；<br>1%手续费、0年费、支持上百种银行卡、信用卡及神州行卡支付；<br>网上签约、轻松结算、7X24小时客户服务、共享千万优质会员资源。';
    var $applyProp = array("postmethod"=>"POST","p0_Cmd"=>"AgentRegister","p1_MerId"=>"10000456219");//代理注册参数组
    var $orderby = 8;
    var $head_charset = "gb2312";

    function toSubmit($payment){
        $merId = $this->getConf($payment['M_OrderId'], 'member_id');
        $ikey = $this->getConf($payment['M_OrderId'], 'PrivateKey');

        $b = 64;
        if (strlen($ikey) > $b){
            $ikey = pack("H*",md5($ikey));
        }
        $ikey = str_pad($ikey, $b, chr(0x00));
        $ipad = str_pad('', $b, chr(0x36));
        $opad = str_pad('', $b, chr(0x5c));
        $k_ipad = $ikey ^ $ipad;
        $k_opad = $ikey ^ $opad;
        //$data = "Buy".$merId.$order->M_OrderId.$order->M_Amount.$order->M_Currency.$order->M_OrderNO.$order->R_Email.$this->callbackUrl."0".$merId;
        $data = "Buy".$merId.$payment["M_OrderId"].$payment["M_Amount"].$payment["M_Currency"].$payment["M_OrderNO"].$payment["R_Email"].$this->callbackUrl."0".$merId;
        $hmac = md5($k_opad . pack("H*",md5($k_ipad.$data)));
        
        $return["p0_Cmd"] = Buy;
        $return["p1_MerId"] = $merId;
        $return["p2_Order"] = $payment["M_OrderId"];//$order->M_OrderId;
        $return["p3_Amt"]    = $payment["M_Amount"];//$order->M_Amount;
        $return["p4_Cur"]    = $payment["M_Currency"];//$order->M_Currency;
        $return["p5_Pid"]    = $payment["M_OrderNO"];//$order->M_OrderNO;
        $return["p6_Pcat"]    = $payment["R_Email"];//$order->R_Email;
        $return["p7_Pdesc"] = "";
        $return["p8_Url"]    = $this->callbackUrl;
        $return["p9_SAF"]    = 0;
        $return["pa_MP"]    = $merId;
        $return["pd_FrpId"] = "";
        $return["hmac"]        = $hmac;
        
        return $return;
    }

    function callback($in,&$paymentId,&$money,&$message){        
        $sCmd = $in['r0_Cmd'];
        $sErrorCode = $in['r1_Code'];
        $sTrxId = $in['r2_TrxId'];
        $amount = $in['r3_Amt'];
        $cur = $in['r4_Cur'];
        $productId = $in['r5_Pid'];
        $orderId = $in['r6_Order'];
        $userId = $in['r7_Uid'];
        $MP = $in['r8_MP'];
        $bType = $in['r9_BType'];
        $svrHmac = $in['hmac'];
        $money = $amount;
        $paymentId = $orderId;
        $key = $this->getConf($orderId, 'PrivateKey');
        $data = $MP.$sCmd.$sErrorCode.$sTrxId.$amount.$cur.$productId.$orderId.$userId.$MP.$bType;
        $charset = $this->system->loadModel('utility/charset');
        //$data = iconv("GB2312","UTF-8",$data);
        $data = $charset->utf2local($data,'zh');

        $b = 64;
        if (strlen($key) > $b){
            $ikey = pack("H*",md5($key));
        }
        $key = str_pad($key, $b, chr(0x00));
        $ipad = str_pad('', $b, chr(0x36));
        $opad = str_pad('', $b, chr(0x5c));
        $k_ipad = $key ^ $ipad;
        $k_opad = $key ^ $opad;
        $hmac = md5($k_opad . pack("H*",md5($k_ipad.$data)));

        if (strtoupper($sCmd)=="BUY"&&$svrHmac == $hmac){
            if($sErrorCode == 1)
                return PAY_SUCCESS;
            else
                $message = '交易失败';
                return PAY_FAILED;
            
        }else{
            $message = '验证失败';
            return PAY_ERROR;# 
        }
    }
    function getfields(){
        return array(
                'member_id'=>array(
                        'label'=>'客户号',
                        'type'=>'string'
                ),
                'PrivateKey'=>array(
                        'label'=>'私钥',
                        'type'=>'string'
                )
            );
    }
    function applyForm($agentfield){
      $key = "A2mo49beDQC87v94nD400439270yff1Pt212H24FI6ET68GT84HC05AtjfB7";
      $msgtype = "AgentRegister";
      $merid = "10000456219";
      $domain = "";
      $data=$msgtype.$merid.$domain;
      $agentfield['hmac'] = $this->hmac($key,$data);
      $tmp_form.='<a href="javascript:void(0)" onclick="document.applyForm.submit();">立即注册</a>';
      $tmp_form.="<form name='applyForm' method='".$agentfield['postmethod']."' action='http://top.shopex.cn/recordpayagent.php' target='_blank'>";
      foreach($agentfield as $key => $val){
            $tmp_form.="<input type='hidden' name='".$key."' value='".$val."'>";
      }
      $tmp_form.="</form>";
      return $tmp_form;
   }
   function hmac($key, $data)
   {
        //需要配置环境支持iconv，否则中文参数不能正常处理
        if (function_exists('utf2local')){
            $key  = utf2local($key,'zh');
            $data = utf2local($data,'zh');
        }else{
            $key = iconv("GB2312","UTF-8",$key);
            $data = iconv("GB2312","UTF-8",$data);
        }
        //$key = utf2local($key,"zh");
        //$data = utf2local($data,"zh");
        //$key = local2utf($key,"zh");
        //$data = local2utf($data,"zh");

        $b = 64; // byte length for md5
        if (strlen($key) > $b) {
        $key = pack("H*",md5($key));
        }
        $key = str_pad($key, $b, chr(0x00));
        $ipad = str_pad('', $b, chr(0x36));
        $opad = str_pad('', $b, chr(0x5c));
        $k_ipad = $key ^ $ipad ;
        $k_opad = $key ^ $opad;

        return md5($k_opad . pack("H*",md5($k_ipad . $data)));
    }
}
?>
