'shenzhou_account', 'type' => 'text', 'value' => ''), array('name' => 'shenzhou_key', 'type' => 'text', 'value' => ''), ); return; } class shenzhou { /** * 构造函数 * * @access public * @param * * @return void */ function shenzhou() { } function __construct() { $this->shenzhou(); } /** * 生成支付代码 * @param array $order 订单信息 * @param array $payment 支付方式信息 */ function get_code($order, $payment) { $merchant_acctid = trim($payment['shenzhou_account']); //快钱神州行账号 不可空 $key = trim($payment['shenzhou_key']); //密钥 不可空 $input_charset = 1; //字符集 默认1=utf-8 $bg_url = ''; $page_url = $GLOBALS['ecs']->url() . 'respond.php'; $version = 'v2.0'; $language = 1; $sign_type = 1; //签名类型 不可空 固定值 1:md5 $payer_name = ''; $payer_contact_type = ''; $payer_contact = ''; $order_id = $order['order_sn']; //商户订单号 不可空 $order_amount = $order['order_amount'] * 100; //商户订单金额 不可空 $pay_type = '00'; //支付方式 不可空 $card_number = ''; $card_pwd = ''; $full_amount_flag = '0'; $order_time = local_date('YmdHis', $order['add_time']); //商户订单提交时间 不可空 14位 $product_name = ''; $product_num = ''; $product_id = ''; $product_desc = ''; $ext1 = $order['log_id']; $ext2 = 'ecshop'; /* 生成加密签名串 请务必按照如下顺序和规则组成加密串!*/ $signmsgval = ''; $signmsgval = $this->append_param($signmsgval, "inputCharset", $input_charset); $signmsgval = $this->append_param($signmsgval, "bgUrl", $bg_url); $signmsgval = $this->append_param($signmsgval, "pageUrl", $page_url); $signmsgval = $this->append_param($signmsgval, "version", $version); $signmsgval = $this->append_param($signmsgval, "language", $language); $signmsgval = $this->append_param($signmsgval, "signType", $sign_type); $signmsgval = $this->append_param($signmsgval, "merchantAcctId", $merchant_acctid); $signmsgval = $this->append_param($signmsgval, "payerName", urlencode($payer_name)); $signmsgval = $this->append_param($signmsgval, "payerContactType", $payer_contact_type); $signmsgval = $this->append_param($signmsgval, "payerContact", $payer_contact); $signmsgval = $this->append_param($signmsgval, "orderId", $order_id); $signmsgval = $this->append_param($signmsgval, "orderAmount", $order_amount); $signmsgval = $this->append_param($signmsgval, "payType", $pay_type); $signmsgval = $this->append_param($signmsgval, "cardNumber", $card_number); $signmsgval = $this->append_param($signmsgval, "cardPwd", $card_pwd); $signmsgval = $this->append_param($signmsgval, "fullAmountFlag", $full_amount_flag); $signmsgval = $this->append_param($signmsgval, "orderTime", $order_time); $signmsgval = $this->append_param($signmsgval, "productName", urlencode($product_name)); $signmsgval = $this->append_param($signmsgval, "productNum", $product_num); $signmsgval = $this->append_param($signmsgval, "productId", $product_id); $signmsgval = $this->append_param($signmsgval, "productDesc", urlencode($product_desc)); $signmsgval = $this->append_param($signmsgval, "ext1", urlencode($ext1)); $signmsgval = $this->append_param($signmsgval, "ext2", urlencode($ext2)); $signmsgval = $this->append_param($signmsgval, "key", $key); $sign_msg = strtoupper(md5($signmsgval)); //安全校验域 不可空 $def_url = '
'; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= ""; $def_url .= "

"; return $def_url; } /** * 响应操作 */ function respond() { $payment = get_payment(basename(__FILE__, '.php')); $merchant_acctid = $payment['shenzhou_account']; //收款帐号 不可空 $key = $payment['shenzhou_key']; $get_merchant_acctid = trim($_REQUEST['merchantAcctId']); //接收的收款帐号 $pay_result = trim($_REQUEST['payResult']); $version = trim($_REQUEST['version']); $language = trim($_REQUEST['language']); $sign_type = trim($_REQUEST['signType']); $pay_type = trim($_REQUEST['payType']); //20代表神州行卡密直接支付;22代表快钱账户神州行余额支付 $card_umber = trim($_REQUEST['cardNumber']); $card_pwd = trim($_REQUEST['cardPwd']); $order_id = trim($_REQUEST['orderId']); //订单号 $order_time = trim($_REQUEST['orderTime']); $order_amount = trim($_REQUEST['orderAmount']); $deal_id = trim($_REQUEST['dealId']); //获取该交易在快钱的交易号 $ext1 = trim($_REQUEST['ext1']); $ext2 = trim($_REQUEST['ext2']); $pay_amount = trim($_REQUEST['payAmount']); //获取实际支付金额 $bill_order_time = trim($_REQUEST['billOrderTime']); $pay_result = trim($_REQUEST['payResult']); //10代表支付成功; 11代表支付失败 $sign_type = trim($_REQUEST['signType']); $sign_msg = trim($_REQUEST['signMsg']); //生成加密串。必须保持如下顺序。 $merchant_signmsgval = $this->append_param($merchant_signmsgval, "merchantAcctId", $merchant_acctid); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "version", $version); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "language", $language); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "payType", $pay_type); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "cardNumber", $card_number); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "cardPwd", $card_pwd); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "orderId", $order_id); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "orderAmount", $order_amount); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "dealId", $deal_id); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "orderTime", $order_time); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "ext1", $ext1); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "ext2", $ext2); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "payAmount", $pay_amount); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "billOrderTime", $bill_order_time); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "payResult", $pay_result); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "signType", $sign_type); $merchant_signmsgval = $this->append_param($merchant_signmsgval, "key", $key); $merchant_signmsg = md5($merchant_signmsgval); //首先对获得的商户号进行比对 if ($get_merchant_acctid != $merchant_acctid) { //'商户号错误'; return false; } if (strtoupper($sign_msg) == strtoupper($merchant_signmsg)) { if ($pay_result == 10) //有成功支付的结果返回10 { order_paid($ext1); return true; } elseif ($pay_result == 11 && $pay_amount > 0) { $sql = "SELECT order_amount FROM " . $GLOBALS['ecs']->table('order_info') ."WHERE order_id = '$order_id'"; $get_order_amount = $GLOBALS['db']->getOne($sql); if ($get_order_amount == $pay_amount && $get_order_amount == $order_amount) //检查订单金额、实际支付金额和订单是否相等 { order_paid($ext1); return true; } elseif ($get_order_amount == $order_amount && $pay_amount > 0) //订单金额相等 实际支付金额 > 0的情况 { $surplus_amount = $get_order_amount - $pay_amount; //计算订单剩余金额 $sql = 'UPDATE' . $GLOBALS['ecs']->table('order_info') . "SET `money_paid` = (money_paid + '$pay_amount')," . " order_amount = (order_amount - '$pay_amount') WHERE order_id = '$order_id'"; $result = $GLOBALS['db']->query($sql); $sql = 'UPDATE' . $GLOBALS['ecs']->table('order_info') . "SET `order_status` ='" . OS_CONFIRMED . "' WHERE order_id = '$orderId'"; $result = $GLOBALS['db']->query($sql); //order_paid($orderId, PS_UNPAYED); //'订单金额小于0'; return false; } else { //'订单金额不相等'; return false; } } else { //'实际支付金额不能小于0'; return false; } } else { //'签名校对错误'; return false; } } /** * 将变量值不为空的参数组成字符串 * @param string $strs 参数字符串 * @param string $key 参数键名 * @param string $val 参数键对应值 */ function append_param($strs,$key,$val) { if($strs != "") { if($val != "") { $strs .= '&' . $key . '=' . $val; } } else { if($val != "") { $strs = $key . '=' . $val; } } return $strs; } } ?>