1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| // re-packing from kuaiqian demo for mobile public function kqPayCallbackSignVerify($params, $cert) { // by rmb_demo_php @kuaiqian 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($params['merchantAcctId'], 'merchantAcctId'); //网关版本,固定值:v2.0,该值与提交时相同。 $kq_check_all_para.=kq_ck_null($params['version'], 'version'); //语言种类,1代表中文显示,2代表英文显示。默认为1,该值与提交时相同。 $kq_check_all_para.=kq_ck_null($params['language'], 'language'); //签名类型,该值为4,代表PKI加密方式,该值与提交时相同。 $kq_check_all_para.=kq_ck_null($params['signType'], 'signType'); //支付方式,一般为00,代表所有的支付方式。如果是银行直连商户,该值为10,该值与提交时相同。 $kq_check_all_para.=kq_ck_null($params['payType'], 'payType'); //银行代码,如果payType为00,该值为空;如果payType为10,该值与提交时相同。 $kq_check_all_para.=kq_ck_null($params['bankId'], 'bankId'); //商户订单号,,该值与提交时相同。 $kq_check_all_para.=kq_ck_null($params['orderId'], 'orderId'); //订单提交时间,格式:yyyyMMddHHmmss,如:20071117020101,该值与提交时相同。 $kq_check_all_para.=kq_ck_null($params['orderTime'], 'orderTime'); //订单金额,金额以“分”为单位,商户测试以1分测试即可,切勿以大金额测试,该值与支付时相同。 $kq_check_all_para.=kq_ck_null($params['orderAmount'], 'orderAmount'); $kq_check_all_para.=kq_ck_null($params['bindCard'], 'bindCard'); $kq_check_all_para.=kq_ck_null($params['bindMobile'], 'bindMobile'); // 快钱交易号,商户每一笔交易都会在快钱生成一个交易号。 $kq_check_all_para.=kq_ck_null($params['dealId'], 'dealId'); //银行交易号 ,快钱交易在银行支付时对应的交易号,如果不是通过银行卡支付,则为空 $kq_check_all_para.=kq_ck_null($params['bankDealId'], 'bankDealId'); //快钱交易时间,快钱对交易进行处理的时间,格式:yyyyMMddHHmmss,如:20071117020101 $kq_check_all_para.=kq_ck_null($params['dealTime'], 'dealTime'); //商户实际支付金额 以分为单位。比方10元,提交时金额应为1000。该金额代表商户快钱账户最终收到的金额。 $kq_check_all_para.=kq_ck_null($params['payAmount'], 'payAmount'); //费用,快钱收取商户的手续费,单位为分。 $kq_check_all_para.=kq_ck_null($params['fee'], 'fee'); //扩展字段1,该值与提交时相同 $kq_check_all_para.=kq_ck_null($params['ext1'], 'ext1'); //扩展字段2,该值与提交时相同。 $kq_check_all_para.=kq_ck_null($params['ext2'], 'ext2'); //处理结果, 10支付成功,11 支付失败,00订单申请成功,01 订单申请失败 $kq_check_all_para.=kq_ck_null($params['payResult'], 'payResult'); //错误代码 ,请参照《人民币网关接口文档》最后部分的详细解释。 $kq_check_all_para.=kq_ck_null($params['errCode'], 'errCode');
$trans_body = mb_substr($kq_check_all_para, 0, mb_strlen($kq_check_all_para)-1); $MAC = base64_decode($params['signMsg']);
// $fp = fopen("./99bill[1].cert.rsa.20140803.cer", "r"); // $cert = fread($fp, 8192); // fclose($fp);
$pubkeyid = openssl_get_publickey($cert);
return openssl_verify($trans_body, $MAC, $pubkeyid); }
|