| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- <?php
- namespace common\pay\huiying;
- use Yii;
- use yii\helpers\VarDumper;
- class PayUtils
- {
-
-
- #签名函数生成签名串
- public static function getReqHmacString($params, $p1_MerId, $merchantKey)
- {
-
- #进行签名处理,一定按照文档中标明的签名顺序进行
- $sbOld = "";
- #加入业务类型
- $sbOld = $sbOld . $params['p0_Cmd'];
- #加入商户编号
- $sbOld = $sbOld . $params['p1_MerId'];
- #加入商户订单号
- $sbOld = $sbOld . $params['p2_Order'];
- #加入支付金额
- $sbOld = $sbOld . $params['p3_Amt'];
- #加入交易币种
- $sbOld = $sbOld . $params['p4_Cur'];
- #加入商品名称
- $sbOld = $sbOld . $params['p5_Pid'];
- #加入商品分类
- $sbOld = $sbOld . $params['p6_Pcat'];
- #加入商品描述
- $sbOld = $sbOld . $params['p7_Pdesc'];
- #加入商户接收支付成功数据的地址
- $sbOld = $sbOld . $params['p8_Url'];
- #加入送货地址标识
- $sbOld = $sbOld . $params['p9_SAF'];
- #加入商户扩展信息
- $sbOld = $sbOld . $params['pa_MP'];
- #加入支付通道编码
- $sbOld = $sbOld . $params['pd_FrpId'];
- #加入是否需要应答机制
- $sbOld = $sbOld . $params['pr_NeedResponse'];
-
- Yii::warning('支付请求参数huiying,' . VarDumper::dumpAsString($sbOld), __METHOD__);
-
- return static::HmacMd5($sbOld, $merchantKey);
-
- }
- public static function getCallbackHmacString($params, $p1_MerId, $merchantKey)
- {
-
- #取得加密前的字符串
- $sbOld = "";
- #加入商家ID
- $sbOld = $sbOld . $p1_MerId;
- #加入消息类型
- $sbOld = $sbOld. $params['r0_Cmd'];
- #加入业务返回码
- $sbOld = $sbOld . $params['r1_Code'];
- #加入交易ID
- $sbOld = $sbOld . $params['r2_TrxId'];
- #加入交易金额
- $sbOld = $sbOld . $params['r3_Amt'];
- #加入货币单位
- $sbOld = $sbOld . $params['r4_Cur'];
- #加入产品Id
- $sbOld = $sbOld . $params['r5_Pid'];
- #加入订单ID
- $sbOld = $sbOld . $params['r6_Order'];
- #加入用户ID
- $sbOld = $sbOld . $params['r7_Uid'];
- #加入商家扩展信息
- $sbOld = $sbOld . $params['r8_MP'];
- #加入交易结果返回类型
- $sbOld = $sbOld . $params['r9_BType'];
- return static::HmacMd5($sbOld, $merchantKey);
- }
-
- public static function CheckHmac($params, $p1_MerId, $merchantKey)
- {
- if($params['hmac'] == static::getCallbackHmacString($params, $p1_MerId, $merchantKey))
- return true;
- else
- return false;
- }
-
-
- public static function HmacMd5($data, $key)
- {
- //需要配置环境支持iconv,否则中文参数不能正常处理
- $key = iconv("GB2312","UTF-8",$key);
- $data = iconv("GB2312","UTF-8",$data);
- $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)));
- }
- }
|