易宝支付碰到 交易签名无效问题 (2)

  无意中翻了翻旧日的代码,原来在上一次交易签名无效的问题仅仅是出现在一个调用的问题上,merchantProperties.php被调用了两次,当第一次被调用的时候是正确加载的,而在第二次调用的时候出就会出现参数丢失的现象,正因为这样加上session或其它全局方式则不会出现此问题,而不是编码问题。

  yeepayCommon.php

  

<?php
include 'merchantProperties.php';
/*
 * @Description 易宝支付产品通用接口范例
 * @V3.0
 * @Author rui.xin
 */
  
 # 产品通用接口正式请求地址
 $reqURL_onLine = "https://www.yeepay.com/app-merchant-proxy/node";
 # 产品通用接口测试请求地址
 #$reqURL_onLine = "http://tech.yeepay.com:8080/robot/debug.action";
  
 # 业务类型
 # 支付请求,固定值"Buy" . 
 $p0_Cmd = "Buy";
  
 # 送货地址
 # 为"1": 需要用户将送货地址留在易宝支付系统;为"0": 不需要,默认为 "0".
 $p9_SAF = "0";
 
#签名函数生成签名串
function getReqHmacString($p2_Order,$p3_Amt,$p4_Cur,$p5_Pid,$p6_Pcat,$p7_Pdesc,$p8_Url,$pa_MP,$pd_FrpId,$pr_NeedResponse)
{
  global $p0_Cmd;
  global $p9_SAF;
 include 'merchantProperties.php';
  
 #进行签名处理,一定按照文档中标明的签名顺序进行
  $sbOld = "";
  #加入业务类型
  $sbOld = $sbOld.$p0_Cmd;
  #加入商户编号
  $sbOld = $sbOld.$p1_MerId;
  #加入商户订单号
  $sbOld = $sbOld.$p2_Order;    
  #加入支付金额
  $sbOld = $sbOld.$p3_Amt;
  #加入交易币种
  $sbOld = $sbOld.$p4_Cur;
  #加入商品名称
  $sbOld = $sbOld.$p5_Pid;
  #加入商品分类
  $sbOld = $sbOld.$p6_Pcat;
  #加入商品描述
  $sbOld = $sbOld.$p7_Pdesc;
  #加入商户接收支付成功数据的地址
  $sbOld = $sbOld.$p8_Url;
  #加入送货地址标识
  $sbOld = $sbOld.$p9_SAF;
  #加入商户扩展信息
  $sbOld = $sbOld.$pa_MP;
  #加入支付通道编码
  $sbOld = $sbOld.$pd_FrpId;
  #加入是否需要应答机制
  $sbOld = $sbOld.$pr_NeedResponse;
 logstr($p2_Order,$sbOld,HmacMd5($sbOld,$merchantKey));
  return HmacMd5($sbOld,$merchantKey);
 
}

function getCallbackHmacString($r0_Cmd,$r1_Code,$r2_TrxId,$r3_Amt,$r4_Cur,$r5_Pid,$r6_Order,$r7_Uid,$r8_MP,$r9_BType)
{
 
 include 'merchantProperties.php';
 
 #取得加密前的字符串
 $sbOld = "";
 #加入商家ID
 $sbOld = $sbOld.$p1_MerId;
 #加入消息类型
 $sbOld = $sbOld.$r0_Cmd;
 #加入业务返回码
 $sbOld = $sbOld.$r1_Code;
 #加入交易ID
 $sbOld = $sbOld.$r2_TrxId;
 #加入交易金额
 $sbOld = $sbOld.$r3_Amt;
 #加入货币单位
 $sbOld = $sbOld.$r4_Cur;
 #加入产品Id
 $sbOld = $sbOld.$r5_Pid;
 #加入订单ID
 $sbOld = $sbOld.$r6_Order;
 #加入用户ID
 $sbOld = $sbOld.$r7_Uid;
 #加入商家扩展信息
 $sbOld = $sbOld.$r8_MP;
 #加入交易结果返回类型
 $sbOld = $sbOld.$r9_BType;

 logstr($r6_Order,$sbOld,HmacMd5($sbOld,$merchantKey));
 return HmacMd5($sbOld,$merchantKey);

}

第一次加载的时候是在php文件中被include 而第二次的时候是在函数里被调用,大家知道在函数调用的时候存在个问题,要在函数里加载到外部的变量,那么就要在这个变量前加上global加以修饰,global有php中并不是全局的意思。因为了解这些,那说明还有另一种改法,就是在被调用的'merchantProperties.php'文件里的变量加上global修饰就行了

merchantProperties.php

<?php
/*
 * @Description 易宝支付产品通用接口范例
 * @V3.0
 * @Author rui.xin
 */
# 商户编号p1_MerId,以及密钥merchantKey 需要从易宝支付平台获得
global  $website ;
global $sernum ;
global $keynum ;


$p1_Url=  'http://'.$website;
$p1_MerId   = $sernum;           #商户号
$merchantKey = $keynum;   #商户密钥

$logName = "YeePay_HTML.log";

?>

 或

<?php

session_start();
/*
 * @Description 易宝支付产品通用接口范例
 * @V3.0
 * @Author rui.xin
 */
# 商户编号p1_MerId,以及密钥merchantKey 需要从易宝支付平台获得
$website = $_SESSION["pweb"] ;
$sernum = $_SESSION["pser"] ;

$keynum = $_SESSION["pkey"] ;


$p1_Url=  'http://'.$website;
$p1_MerId   = $sernum;        #商户号
$merchantKey = $keynum; #商户密钥

$logName = "YeePay_HTML.log";

?>

 

posted on 2011-12-09 10:32  belie8  阅读(5644)  评论(0编辑  收藏  举报

导航