'nps_account', 'type' => 'text', 'value' => ''), array('name' => 'nps_key', 'type' => 'text', 'value' => ''), ); return; } class nps { /** * 构造函数 * * @access public * @param * * @return void */ function nps() { } function __construct() { $this->nps(); } /** * 生成支付代码 * @param array $order 订单信息 * @param array $payment 支付方式信息 */ function get_code($order, $payment) { $m_id = trim($payment['nps_account']); $m_orderid = $order['log_id']; $m_oamount = $order['order_amount']; $m_ocurrency = '1'; $m_url = return_url(basename(__FILE__, '.php')); $m_language = '1'; $s_name = 'null'; $s_addr = 'null'; $s_postcode = 'null'; $s_tel = 'null'; $s_eml = 'null'; $r_name = 'null'; $r_addr = 'null'; $r_postcode = 'null'; $r_tel = 'null'; $r_eml = 'null'; $m_ocomment = '欢迎使用NPS在线支付'; $modate = date('y-m-d H:i:s',time()); $m_status = 0; //组织订单信息 $m_info = $m_id . '|' . $m_orderid . '|' . $m_oamount . '|' . $m_ocurrency . '|' . $m_url . '|' . $m_language; $s_info = $s_name . '|' . $s_addr . '|' . $s_postcode . '|' . $s_tel . '|' . $s_eml; $r_info = $r_name . '|' . $r_addr . '|' . $r_postcode . '|' . $r_tel . '|' . $r_eml . '|' . $m_ocomment . '|' . $m_status . '|' . $modate; $OrderInfo = $m_info . '|' . $s_info . '|' . $r_info; //订单信息先转换成HEX,然后再加密 $key = $payment['nps_key']; //<--支付密钥--> 注:此处密钥必须与商家后台里的密钥一致 $OrderInfo = $this->StrToHex($OrderInfo); $digest = strtoupper(md5($OrderInfo . $key)); $def_url = "
"; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= '
'; return $def_url; } /** * 响应操作 */ function respond() { $payment = get_payment(basename(__FILE__, '.php')); $m_id = $_POST['m_id']; // 商家号 $m_orderid = $_POST['m_orderid']; // 商家订单号 $m_oamount = $_POST['m_oamount']; // 支付金额 $m_ocurrency = $_POST['m_ocurrency']; // 币种 $m_language = $_POST['m_language']; // 语言选择 $s_name = $_POST['s_name']; // 消费者姓名 $s_addr = $_POST['s_addr']; // 消费者住址 $s_postcode = $_POST['s_postcode']; // 邮政编码 $s_tel = $_POST['s_tel']; // 消费者联系电话 $s_eml = $_POST['s_eml']; // 消费者邮件地址 $r_name = $_POST['r_name']; // 消费者姓名 $r_addr = $_POST['r_addr']; // 收货人住址 $r_postcode = $_POST['r_postcode']; // 收货人邮政编码 $r_tel = $_POST['r_tel']; // 收货人联系电话 $r_eml = $_POST['r_eml']; // 收货人电子地址 $m_ocomment = $_POST['m_ocomment']; // 备注 $State = $_POST['m_status']; // 支付状态2成功,3失败 $modate = $_POST['modate']; // 返回日期 $order_sn = $_POST['m_orderid']; //接收组件的加密 $OrderInfo = $_POST['OrderMessage'];// 订单加密信息 $signMsg = $_POST['Digest']; // 密匙 //接收新的md5加密认证 $newmd5info = $_POST['newmd5info']; //检查签名 $key = $payment['nps_key']; //<--支付密钥--> 注:此处密钥必须与商家后台里的密钥一致 $digest = strtoupper(md5($OrderInfo . $key)); //新的整合md5加密 $newtext = $m_id . $m_orderid . $m_oamount . $key . $State; $newMd5digest = strtoupper(md5($newtext)); if ($digest == $signMsg) { //解密 //$decode = $DES->Descrypt($OrderInfo, $key); $OrderInfo = $this->HexToStr($OrderInfo); //md5密匙认证 if ($newmd5info == $newMd5digest) { if ($State == 2) { //改变订单状态 order_paid($m_orderid); return true; } else { return false; } } else { return false; } } else { return false; } } function StrToHex($string) { $hex = ''; for ($i = 0, $count = strlen($string); $i < $count; $i++) { $hex .= dechex(ord($string[$i])); } return strtoupper($hex); } function HexToStr($hex) { $string = ''; for ($i = 0, $count = strlen($hex) - 1; $i < $count; $i += 2) { $string .= chr(hexdec($hex[$i] . $hex[$i + 1])); } return $string; } } ?>