Esempio n. 1
0
$kq_all_para .= kq_ck_null($payerName, 'payerName');
$kq_all_para .= kq_ck_null($payerContactType, 'payerContactType');
$kq_all_para .= kq_ck_null($payerContact, 'payerContact');
$kq_all_para .= kq_ck_null($orderId, 'orderId');
$kq_all_para .= kq_ck_null($orderAmount, 'orderAmount');
$kq_all_para .= kq_ck_null($orderTime, 'orderTime');
$kq_all_para .= kq_ck_null($productName, 'productName');
$kq_all_para .= kq_ck_null($productNum, 'productNum');
$kq_all_para .= kq_ck_null($productId, 'productId');
$kq_all_para .= kq_ck_null($productDesc, 'productDesc');
$kq_all_para .= kq_ck_null($ext1, 'ext1');
$kq_all_para .= kq_ck_null($ext2, 'ext2');
$kq_all_para .= kq_ck_null($payType, 'payType');
$kq_all_para .= kq_ck_null($bankId, 'bankId');
$kq_all_para .= kq_ck_null($redoFlag, 'redoFlag');
$kq_all_para .= kq_ck_null($pid, 'pid');
$kq_all_para = substr($kq_all_para, 0, strlen($kq_all_para) - 1);
/////////////  RSA 签名计算 ///////// 开始 //
$fp = fopen(DT_ROOT . "/api/pay/" . $bank . "/pcarduser.pem", "r");
$priv_key = fread($fp, 123456);
fclose($fp);
$pkeyid = openssl_get_privatekey($priv_key);
// compute signature
openssl_sign($kq_all_para, $signMsg, $pkeyid, OPENSSL_ALGO_SHA1);
// free the key from memory
openssl_free_key($pkeyid);
$signMsg = base64_encode($signMsg);
/////////////  RSA 签名计算 ///////// 结束 //
//https://sandbox.99bill.com/gateway/recvMerchantInfoAction.htm
//https://www.99bill.com/gateway/recvMerchantInfoAction.htm
?>
Esempio n. 2
0
$kq_check_all_para .= kq_ck_null($_REQUEST['bankDealId'], 'bankDealId');
//快钱交易时间,快钱对交易进行处理的时间,格式:yyyyMMddHHmmss,如:20071117020101
$kq_check_all_para .= kq_ck_null($_REQUEST['dealTime'], 'dealTime');
//商户实际支付金额 以分为单位。比方10元,提交时金额应为1000。该金额代表商户快钱账户最终收到的金额。
$kq_check_all_para .= kq_ck_null($_REQUEST['payAmount'], 'payAmount');
//费用,快钱收取商户的手续费,单位为分。
$kq_check_all_para .= kq_ck_null($_REQUEST['fee'], 'fee');
//扩展字段1,该值与提交时相同
$kq_check_all_para .= kq_ck_null($_REQUEST['ext1'], 'ext1');
//扩展字段2,该值与提交时相同。
$kq_check_all_para .= kq_ck_null($_REQUEST['ext2'], 'ext2');
//处理结果, 10支付成功,11 支付失败,00订单申请成功,01 订单申请失败
$kq_check_all_para .= kq_ck_null($_REQUEST['payResult'], 'payResult');
//错误代码 ,请参照《人民币网关接口文档》最后部分的详细解释。
$kq_check_all_para .= kq_ck_null($_REQUEST['errCode'], 'errCode');
$kq_check_all_para .= kq_ck_null($key, "key");
$kq_check_all_para = substr($kq_check_all_para, 0, strlen($kq_check_all_para) - 1);
$merchantSignMsg = md5($kq_check_all_para);
//获取加密签名串
$signMsg = trim($_REQUEST['signMsg']);
//初始化结果及地址
$rtnOk = 0;
$rtnUrl = "";
//商家进行数据处理,并跳转会商家显示支付结果的页面
///首先进行签名字符串验证
if (strtoupper($signMsg) == strtoupper($merchantSignMsg)) {
    switch ($_REQUEST['payResult']) {
        case '10':
            //此处做商户逻辑处理
            if (substr($_REQUEST['orderId'], 0, 2) == 'dz') {
                $updatesql = "update sline_dzorder set status=2 where ordersn='{$_REQUEST['orderId']}'";
Esempio n. 3
0
//银行交易号 ,快钱交易在银行支付时对应的交易号,如果不是通过银行卡支付,则为空
$kq_check_all_para .= kq_ck_null($_REQUEST[bankDealId], 'bankDealId');
//快钱交易时间,快钱对交易进行处理的时间,格式:yyyyMMddHHmmss,如:20071117020101
$kq_check_all_para .= kq_ck_null($_REQUEST[dealTime], 'dealTime');
//商户实际支付金额 以分为单位。比方10元,提交时金额应为1000。该金额代表商户快钱账户最终收到的金额。
$kq_check_all_para .= kq_ck_null($_REQUEST[payAmount], 'payAmount');
//费用,快钱收取商户的手续费,单位为分。
$kq_check_all_para .= kq_ck_null($_REQUEST[fee], 'fee');
//扩展字段1,该值与提交时相同
$kq_check_all_para .= kq_ck_null($_REQUEST[ext1], 'ext1');
//扩展字段2,该值与提交时相同。
$kq_check_all_para .= kq_ck_null($_REQUEST[ext2], 'ext2');
//处理结果, 10支付成功,11 支付失败,00订单申请成功,01 订单申请失败
$kq_check_all_para .= kq_ck_null($_REQUEST[payResult], 'payResult');
//错误代码 ,请参照《人民币网关接口文档》最后部分的详细解释。
$kq_check_all_para .= kq_ck_null($_REQUEST[errCode], 'errCode');
$trans_body = substr($kq_check_all_para, 0, strlen($kq_check_all_para) - 1);
$MAC = base64_decode($_REQUEST[signMsg]);
$fp = fopen(DT_ROOT . "/api/pay/" . $bank . "/" . $PAY[$bank]['cert'], "r");
$cert = fread($fp, 8192);
fclose($fp);
$pubkeyid = openssl_get_publickey($cert);
$ok = openssl_verify($trans_body, $MAC, $pubkeyid);
if ($ok == 1) {
    switch ($_REQUEST[payResult]) {
        case '10':
            //此处做商户逻辑处理
            $itemid = intval($_REQUEST['orderId']);
            $amount = $_REQUEST['payAmount'] / 100;
            $r = $db->get_one("SELECT * FROM {$DT_PRE}finance_charge WHERE itemid='{$itemid}'");
            if ($r) {
Esempio n. 4
0
 public function kqrv()
 {
     $my_config = (require APPPATH . 'config/mail.php');
     $flag = 0;
     //是否成功更新MT4余额
     $status = "";
     set_time_limit(0);
     ini_set('date.timezone', 'PRC');
     function kq_ck_null($kq_va, $kq_na)
     {
         if ($kq_va == "") {
             return $kq_va = "";
         } else {
             return $kq_va = $kq_na . '=' . $kq_va . '&';
         }
     }
     // 人民币网关账号,该账号为11位人民币网关商户编号+01,该值与提交时相同。
     $kq_check_all_para = kq_ck_null($_REQUEST['merchantAcctId'], 'merchantAcctId');
     // 网关版本,固定值:v2.0,该值与提交时相同。
     $kq_check_all_para .= kq_ck_null($_REQUEST['version'], 'version');
     // 语言种类,1代表中文显示,2代表英文显示。默认为1,该值与提交时相同。
     $kq_check_all_para .= kq_ck_null($_REQUEST['language'], 'language');
     // 签名类型,该值为4,代表PKI加密方式,该值与提交时相同。
     $kq_check_all_para .= kq_ck_null($_REQUEST['signType'], 'signType');
     // 支付方式,一般为00,代表所有的支付方式。如果是银行直连商户,该值为10,该值与提交时相同。
     $kq_check_all_para .= kq_ck_null($_REQUEST['payType'], 'payType');
     // 银行代码,如果payType为00,该值为空;如果payType为10,该值与提交时相同。
     $kq_check_all_para .= kq_ck_null($_REQUEST['bankId'], 'bankId');
     // 商户订单号,,该值与提交时相同。
     $kq_check_all_para .= kq_ck_null($_REQUEST['orderId'], 'orderId');
     // 订单提交时间,格式:yyyyMMddHHmmss,如:20071117020101,该值与提交时相同。
     $kq_check_all_para .= kq_ck_null($_REQUEST['orderTime'], 'orderTime');
     // 订单金额,金额以“分”为单位,商户测试以1分测试即可,切勿以大金额测试,该值与支付时相同。
     $kq_check_all_para .= kq_ck_null($_REQUEST['orderAmount'], 'orderAmount');
     // 快钱交易号,商户每一笔交易都会在快钱生成一个交易号。
     $kq_check_all_para .= kq_ck_null($_REQUEST['dealId'], 'dealId');
     // 银行交易号 ,快钱交易在银行支付时对应的交易号,如果不是通过银行卡支付,则为空
     $kq_check_all_para .= kq_ck_null($_REQUEST['bankDealId'], 'bankDealId');
     // 快钱交易时间,快钱对交易进行处理的时间,格式:yyyyMMddHHmmss,如:20071117020101
     $kq_check_all_para .= kq_ck_null($_REQUEST['dealTime'], 'dealTime');
     // 商户实际支付金额 以分为单位。比方10元,提交时金额应为1000。该金额代表商户快钱账户最终收到的金额。
     $kq_check_all_para .= kq_ck_null($_REQUEST['payAmount'], 'payAmount');
     // 费用,快钱收取商户的手续费,单位为分。
     $kq_check_all_para .= kq_ck_null($_REQUEST['fee'], 'fee');
     // 扩展字段1,该值与提交时相同
     $kq_check_all_para .= kq_ck_null($_REQUEST['ext1'], 'ext1');
     // 扩展字段2,该值与提交时相同。
     $kq_check_all_para .= kq_ck_null($_REQUEST['ext2'], 'ext2');
     // 处理结果, 10支付成功,11 支付失败,00订单申请成功,01 订单申请失败
     $kq_check_all_para .= kq_ck_null($_REQUEST['payResult'], 'payResult');
     // 错误代码 ,请参照《人民币网关接口文档》最后部分的详细解释。
     $kq_check_all_para .= kq_ck_null($_REQUEST['errCode'], 'errCode');
     $trans_body = substr($kq_check_all_para, 0, strlen($kq_check_all_para) - 1);
     $MAC = base64_decode($_REQUEST['signMsg']);
     $fp = fopen(FCPATH . 'public/pay/99bill.cert.rsa.20140728.cer', "r");
     $cert = fread($fp, 8192);
     fclose($fp);
     $pubkeyid = openssl_get_publickey($cert);
     $ok = openssl_verify($trans_body, $MAC, $pubkeyid);
     if ($ok == 1) {
         switch ($_REQUEST['payResult']) {
             case '10':
                 // 支付成功,业务逻辑处理
                 $rtnOK = 1;
                 $rtnUrl = site_url('user/show') . '?msg=success';
                 $my_id = $_REQUEST['orderId'];
                 //自定义订单号
                 $id = $_REQUEST['dealId'];
                 //快钱交易号
                 $r5_Pid = $_REQUEST['ext1'];
                 //用户字段
                 $amount = $_REQUEST['orderAmount'] / 100;
                 // 分转为元
                 $mydate = $_REQUEST['dealTime'];
                 //交易时间 20130508135432
                 //时间判断 当前时间大于订单时间8分钟则不处理
                 $d_time = strtotime($mydate);
                 if (time() - $d_time > 8 * 60) {
                     exit;
                 }
                 // 检查订单是否已处理,防止重复入金
                 $this->load->model('depositmodel');
                 if ($this->depositmodel->is_deposit($id)) {
                     break;
                 }
                 //写入redis
                 $r_message = '用户<span>' . $r5_Pid . '</span>在线入金<span>¥' . $amount . '</span>---' . ($date = date('Y-m-d H:i:s', $d_time));
                 $this->save_item_in_redis($r_message);
                 //更新订单
                 $params = array('order_id' => $id, 'is_ok' => 1);
                 $this->depositmodel->changeOrder($params, $my_id);
                 $server_name = $this->depositmodel->getServerName($my_id);
                 // 更新账户余额
                 if ($my_config['is_rj'] == 1) {
                     $local_port = $this->depositmodel->getServerLocalPort($my_id);
                     if ($local_port === FALSE) {
                         break;
                     }
                     $this->load->model('exchange_rate_model');
                     $hl = $this->exchange_rate_model->get_exchange_rate();
                     //取汇率
                     $huilv = $hl[0]->deposit_rate;
                     $deposit_factor = $hl[0]->deposit_factor;
                     $params['login'] = $r5_Pid;
                     $params['value'] = round($amount * $deposit_factor / $huilv, 2);
                     $params['comment'] = "D online {$id}";
                     $this->load->model('usermodel');
                     $data = $this->usermodel->changeBlance($params, $local_port);
                     $result = $this->parseMT4Answer($data);
                     if ($result['success'] === TRUE || isset($result['']) && is_null($result[''])) {
                         $status .= "更新交易账户余额成功。\r\n";
                         $flag = 1;
                     } else {
                         $status .= $result['reason'] . ",本次入金未更新至账户,请手动处理。\r\n";
                     }
                 } else {
                     $flag = 2;
                     //未开启此功能
                 }
                 //更新订单
                 $params = array('is_success' => $flag);
                 $this->depositmodel->changeOrder($params, $my_id);
                 // 发送邮件通知
                 if ($my_config['is_open'] == 1) {
                     $this->load->library('email');
                     $config['protocol'] = 'smtp';
                     $config['smtp_host'] = $my_config['email']['host'];
                     $config['smtp_user'] = $my_config['email']['username'];
                     $config['smtp_pass'] = $my_config['email']['password'];
                     $config['smtp_port'] = 25;
                     $config['charset'] = $my_config['email']['charset'];
                     $config['crlf'] = "\r\n";
                     $config['newline'] = "\r\n";
                     $config['wordwrap'] = TRUE;
                     $this->email->initialize($config);
                     $this->email->from($my_config['email']['username'], 'Admin');
                     $this->email->to($my_config['list']);
                     if ($flag === 1) {
                         $subject = "在线入金通知[更新成功]";
                     } elseif ($flag === 0) {
                         $subject = "在线入金通知[更新失败-{$status}]";
                     } else {
                         $subject = "在线入金通知";
                     }
                     $content = "账户ID:{$r5_Pid}\r\n" . "金额(¥):{$amount}\r\n" . "服务器:{$server_name}\r\n" . "订单号:{$id}\r\n" . "时间:" . date('Y-m-d H:i:s', strtotime($mydate)) . "\r\n与MT4服务器交互状态:\r\n" . $status;
                     $this->email->subject($subject);
                     $this->email->message($content);
                     $this->email->send();
                 }
                 break;
             default:
                 $rtnOK = 1;
                 // 支付失败
                 $rtnUrl = site_url('user/show') . '?msg=false';
                 break;
         }
     } else {
         $rtnOK = 1;
         // 验证签名失败
         $rtnUrl = site_url('user/show') . '?msg=error';
     }
     $vdata = array('rtnOK' => $rtnOK, 'rtnUrl' => $rtnUrl);
     $this->load->view('kqrv', $vdata);
 }
Esempio n. 5
0
$kq_all_para .= kq_ck_null($orderAmount, 'orderAmount');
$kq_all_para .= kq_ck_null($orderTime, 'orderTime');
$kq_all_para .= kq_ck_null($productName, 'productName');
$kq_all_para .= kq_ck_null($productNum, 'productNum');
$kq_all_para .= kq_ck_null($productId, 'productId');
$kq_all_para .= kq_ck_null($productDesc, 'productDesc');
$kq_all_para .= kq_ck_null($ext1, 'ext1');
$kq_all_para .= kq_ck_null($ext2, 'ext2');
$kq_all_para .= kq_ck_null($payType, 'payType');
$kq_all_para .= kq_ck_null($bankId, 'bankId');
$kq_all_para .= kq_ck_null($redoFlag, 'redoFlag');
$kq_all_para .= kq_ck_null($pid, 'pid');
//人民币网关密钥
///区分大小写.请与快钱联系索取
$key = $GLOBALS['cfg_bill_key'];
$kq_all_para .= kq_ck_null($key, 'key');
$kq_all_para = substr($kq_all_para, 0, strlen($kq_all_para) - 1);
//echo $kq_all_para;
$signMsg = strtoupper(md5($kq_all_para));
/////////////  RSA 签名计算 ///////// 开始 //
/*
$fp = fopen("./99bill-rsa.pem", "r");
$priv_key = fread($fp,123456);
fclose($fp);

$pkeyid = openssl_get_privatekey($priv_key);

// compute signature
openssl_sign($kq_all_para, $signMsg, $pkeyid,OPENSSL_ALGO_SHA1);
// free the key from memory
openssl_free_key($pkeyid);