*易宝接口类

*/classyeepay{var$dsql;# 业务类型# 支付请求,固定值"Buy"var$p0_Cmd='Buy';#     送货地址# 为"1": 需要用户将送货地址留在易宝支付系统;为"0": 不需要,默认为 "0".var$p9_SAF="0";# 网关地址不能随便更改var$reqURL_onLine="https://www.yeepay.com/app-merchant-proxy/node";//$reqURL_onLine = "http://tech.yeepay.com:8080/robot/debug.action";/**

* 构造函数

*

* @access  public

* @param

*

* @return void

*/functionyeepay(){global$dsql;$this->dsql=$dsql;}function__construct(){$this->yeepay();}/**

* 生成支付代码

* @param   array   $order      订单信息

* @param   array   $payment    支付方式信息

*/functionGetCode($order,$payment){global$cfg_basehost;#       商家设置用户购买商品的支付信息.##易宝支付平台统一使用GBK/GB2312编码方式,参数如用到中文,请注意转码#       商户订单号,选填.##若不为"",提交的订单号必须在自身账户交易中唯一;为""时,易宝支付会自动生成随机的商户订单号.$p2_Order=trim($order['out_trade_no']);#       支付金额,必填.##单位:元,精确到分.$p3_Amt=$order['price'];#       交易币种,固定值"CNY".$p4_Cur="CNY";#       商品名称##用于支付时显示在易宝支付网关左侧的订单产品信息.$p5_Pid=trim($order['out_trade_no']);#       商品种类$p6_Pcat='cart';#       商品描述$p7_Pdesc='';#       商户接收支付成功数据的地址,支付成功后易宝支付会向该地址发送两次成功通知.$p8_Url=$cfg_basehost."/plus/carbuyaction.php?dopost=return&code=".$payment['code'];#       商户扩展信息##商户可以任意填写1K 的字符串,支付成功时将原样返回.$pa_MP='member';#       应答机制##为"1": 需要应答机制;为"0": 不需要应答机制.$pr_NeedResponse=1;#       银行编码##默认为"",到易宝支付网关.若不需显示易宝支付的页面,直接跳转到各银行、神州行支付、骏网一卡通等支付页面,该字段可依照附录:银行列表设置参数值.$pd_FrpId='';#调用签名函数生成签名串$hmac=$this->getReqHmacString($payment['yp_account'],$payment['yp_key'],$p2_Order,$p3_Amt,$p4_Cur,$p5_Pid,$p6_Pcat,$p7_Pdesc,$p8_Url,$pa_MP,$pd_FrpId,$pr_NeedResponse);$button='

';/* 清空购物车 */require_once DEDEINC.'/shopcar.class.php';$cart=newMemberShops();$cart->clearItem();$cart->MakeOrders();return$button;}/**

* 响应操作

*/functionrespond(){/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';$p1_MerId=trim($payment['yp_account']);$merchantKey=trim($payment['yp_key']);#     解析返回参数.$return=$this->getCallBackValue($r0_Cmd,$r1_Code,$r2_TrxId,$r3_Amt,$r4_Cur,$r5_Pid,$r6_Order,$r7_Uid,$r8_MP,$r9_BType,$hmac);#       判断返回签名是否正确(True/False)$bRet=$this->CheckHmac($p1_MerId,$merchantKey,$r0_Cmd,$r1_Code,$r2_TrxId,$r3_Amt,$r4_Cur,$r5_Pid,$r6_Order,$r7_Uid,$r8_MP,$r9_BType,$hmac);#   校验码正确.if($bRet){if($r1_Code=="1"){/*判断订单类型*/if(preg_match("/S-P[0-9]+RN[0-9]/",$r6_Order)){$ordertype="goods";}elseif(preg_match("/M[0-9]+T[0-9]+RN[0-9]/",$r6_Order)){$row=$this->dsql->GetOne("SELECT * FROM #@__member_operation WHERE buyid = '{$r6_Order}'");//获取订单信息,检查订单的有效性if(!is_array($row)||$row['sta']==2)return$msg="您的订单已经处理,请不要重复提交!";$ordertype="member";$product=$row['product'];$pname=$row['pname'];$pid=$row['pid'];}else{return$msg="支付失败,您的订单号有问题!";}#       需要比较返回的金额与商家数据库中订单的金额是否相等,只有相等的情况下才认为是交易成功.#       并且需要对返回的处理进行事务控制,进行记录的排它性处理,防止对同一条交易重复发货的情况发生.if($r9_BType=="1"||$r9_BType=="3"){if($ordertype=="goods"){if($this->success_db($r6_Order))return$msg="支付成功!返回主页 会员中心";elsereturn$msg="支付失败!返回主页 会员中心";}elseif($ordertype=="member"){if($this->success_mem($r6_Order,$pname,$product,$pid))return$msg="支付成功!返回主页 会员中心";elsereturn$msg="支付失败!返回主页 会员中心";}}elseif($r9_BType=="2"){#如果需要应答机制则必须回写流,以success开头,大小写不敏感.echo"success";if($ordertype=="goods"){if($this->success_db($r6_Order))return$msg="支付成功!返回主页 会员中心";elsereturn$msg="支付失败!返回主页 会员中心";}elseif($ordertype=="member"){if($this->success_mem($r6_Order,$pname,$product,$pid))return$msg="支付成功!返回主页 会员中心";elsereturn$msg="支付失败!返回主页 会员中心";}}}}else{$this->log_result("verify_failed");return$msg="交易信息被篡!返回主页 ";}}#签名函数生成签名串functiongetReqHmacString($p1_MerId,$merchantKey,$p2_Order,$p3_Amt,$p4_Cur,$p5_Pid,$p6_Pcat,$p7_Pdesc,$p8_Url,$pa_MP,$pd_FrpId,$pr_NeedResponse){#进行签名处理,一定按照文档中标明的签名顺序进行$sbOld="";#加入业务类型$sbOld=$sbOld.$this->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.$this->p9_SAF;#加入商户扩展信息$sbOld=$sbOld.$pa_MP;#加入银行编码$sbOld=$sbOld.$pd_FrpId;#加入是否需要应答机制$sbOld=$sbOld.$pr_NeedResponse;return$this->HmacMd5($sbOld,$merchantKey);}#       取得返回串中的所有参数functiongetCallBackValue(&$r0_Cmd,&$r1_Code,&$r2_TrxId,&$r3_Amt,&$r4_Cur,&$r5_Pid,&$r6_Order,&$r7_Uid,&$r8_MP,&$r9_BType,&$hmac){$r0_Cmd=$_REQUEST['r0_Cmd'];$r1_Code=$_REQUEST['r1_Code'];$r2_TrxId=$_REQUEST['r2_TrxId'];$r3_Amt=$_REQUEST['r3_Amt'];$r4_Cur=$_REQUEST['r4_Cur'];$r5_Pid=$_REQUEST['r5_Pid'];$r6_Order=$_REQUEST['r6_Order'];$r7_Uid=$_REQUEST['r7_Uid'];$r8_MP=$_REQUEST['r8_MP'];$r9_BType=$_REQUEST['r9_BType'];$hmac=$_REQUEST['hmac'];returnnull;}functionCheckHmac($p1_MerId,$merchantKey,$r0_Cmd,$r1_Code,$r2_TrxId,$r3_Amt,$r4_Cur,$r5_Pid,$r6_Order,$r7_Uid,$r8_MP,$r9_BType,$hmac){if($hmac==$this->getCallbackHmacString($p1_MerId,$merchantKey,$r0_Cmd,$r1_Code,$r2_TrxId,$r3_Amt,$r4_Cur,$r5_Pid,$r6_Order,$r7_Uid,$r8_MP,$r9_BType))returntrue;elsereturnfalse;}functiongetCallbackHmacString($p1_MerId,$merchantKey,$r0_Cmd,$r1_Code,$r2_TrxId,$r3_Amt,$r4_Cur,$r5_Pid,$r6_Order,$r7_Uid,$r8_MP,$r9_BType){#取得加密前的字符串$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;return$this->HmacMd5($sbOld,$merchantKey,'gbk');}functionHmacMd5($data,$key,$lang='utf-8'){// RFC 2104 HMAC implementation for php.// Creates an md5 HMAC.// Eliminates the need to install mhash to compute a HMAC// Hacked by Lance Rushing(NOTE: Hacked means written)//需要配置环境支持iconv,否则中文参数不能正常处理if($GLOBALS['cfg_soft_lang']!='utf-8'||$lang!='utf-8'){if(!function_exists('iconv')){exit('Not install iconv lib!');}else{$key=iconv("GB2312","UTF-8//IGNORE",$key);$data=iconv("GB2312","UTF-8//IGNORE",$data);}}$b=64;// byte length for md5if(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;returnmd5($k_opad.pack("H*",md5($k_ipad.$data)));}/*处理商品交易*/functionsuccess_db($buyid){require_once DEDEINC.'/memberlogin.class.php';$cfg_ml=newMemberLogin();$cfg_ml->PutLoginInfo($cfg_ml->M_ID);//获取订单信息,检查订单的有效性$row=$this->dsql->GetOne("Select state From #@__shops_orders where oid='$buyid' ");if($row['state']>0){returntrue;}$sql="UPDATE `#@__shops_orders` SET `state`='1' WHERE `oid`='$buyid' AND `userid`='".$cfg_ml->M_ID."';";if($this->dsql->ExecuteNoneQuery($sql)){returntrue;}else{returnfalse;}returnfalse;}/*处理点卡,会员升级*/functionsuccess_mem($order_sn,$pname,$product,$pid){require_once DEDEINC.'/memberlogin.class.php';$cfg_ml=newMemberLogin();$cfg_ml->PutLoginInfo($cfg_ml->M_ID);//更新交易状态为已付款$sql="UPDATE `#@__member_operation` SET `sta`='1' WHERE `buyid`='$order_sn' AND `mid`='".$cfg_ml->M_ID."'";$this->dsql->ExecuteNoneQuery($sql);/* 改变点卡订单状态_支付成功 */if($product=="card"){$row=$this->dsql->GetOne("Select cardid From #@__moneycard_record where ctid='$pid' And isexp='0' ");//如果找不到某种类型的卡,直接为用户增加金币if(!is_array($row)){$nrow=$this->dsql->GetOne("SELECT num FROM #@__moneycard_type WHERE pname = '{$pname}'");$dnum=$nrow['num'];$sql1="UPDATE `#@__member` SET `money`=money+'{$nrow['num']}' WHERE `mid`='".$cfg_ml->M_ID."'";$oldinf="直接充值了".$nrow['num']."金币到帐号!";}else{$cardid=$row['cardid'];$sql1=" Update #@__moneycard_record set uid='".$cfg_ml->M_ID."',isexp='1',utime='".time()."' where cardid='$cardid' ";$oldinf="充值密码:".$cardid;}//更新交易状态为已关闭$sql2=" Update #@__member_operation set sta=2,oldinfo='$oldinf' where buyid='$order_sn'";if($this->dsql->ExecuteNoneQuery($sql1)&&$this->dsql->ExecuteNoneQuery($sql2)){$this->dsql->Close();$this->log_result("verify_success,订单号:".$order_sn);//将验证结果存入文件returntrue;}else{$this->dsql->Close();$this->log_result("verify_failed,订单号:".$order_sn);//将验证结果存入文件returnfalse;}/* 改变会员订单状态_支付成功 */}elseif($product=="member"){$row=$dsql->GetOne("Select rank,exptime From #@__member_type where aid='$pid' ");$rank=$row['rank'];$exptime=$row['exptime'];/*计算原来升级剩余的天数*/$rs=$this->dsql->GetOne("Select uptime,exptime From #@__member where mid='".$cfg_ml->M_ID."'");if($rs['uptime']!=0&&$rs['exptime']!=0){$nowtime=time();$mhasDay=$rs['exptime']-ceil(($nowtime-$rs['uptime'])/3600/24)+1;$mhasDay=($mhasDay>0)?$mhasDay:0;}$sql1="Update #@__member set rank='$rank',exptime='$exptime',uptime='".time()."' where mid='".$cfg_ml->M_ID."'";//更新交易状态为已关闭$sql2=" Update #@__member_operation set sta='2',oldinfo='会员升级成功!' where buyid='$order_sn' ";if($this->dsql->ExecuteNoneQuery($sql1)&&$this->dsql->ExecuteNoneQuery($sql2)){$this->dsql->Close();$this->log_result("verify_success,订单号:".$order_sn);//将验证结果存入文件returntrue;}else{$this->dsql->Close();$this->log_result("verify_failed,订单号:".$order_sn);//将验证结果存入文件returnfalse;}}}functionlog_result($word){global$cfg_cmspath;$fp=fopen(dirname(__FILE__)."/../../data/payment/log.txt","a");flock($fp,LOCK_EX);fwrite($fp,$word.",执行日期:".strftime("%Y-%m-%d %H:%I:%S",time())."\r\n");flock($fp,LOCK_UN);fclose($fp);}}?>

易宝php测试账号和密匙,易宝php支付相关推荐

  1. 工作奇谈——使用对称密匙加密数据

    1.对称密匙及对称加密算法DES简介 对称密钥加密,又称私钥加密,即信息的发送方和接收方用一个密钥去加密和解密数据.它的最大优势是加/解密速度快,适合于对大数据量进行加密. DES算法全称为Data ...

  2. Git配置远程仓库(密匙链接)

    Git配置远程仓库(密匙链接) 主机名 IP 备注 git01 192.168.200.31 git测试客户端一 git02 192.168.200.32 git测试客户端二 1.建立远程仓库 首先在 ...

  3. SM2 加密解密 公式密匙 导出

    借用 hutool-all,bouncycastle实现,公式密匙导出文件,解密再读取文件 pom.xml <dependency><groupId>cn.hutool< ...

  4. 如何用 openssl 生成RSA双密匙;签名证书;加密文件邮件

    网上已有好多关于openssl的帖子,但是基本上都很"实用",只讲如何创建证书来用于数据的加密,如何你只需要这些,那么可以去  "流浪的脚步"的博客 http: ...

  5. Windows下给GitHub 配置 GIT 工具时密匙添加问题

    第一步:在GitHub官网(https://github.com/)注册自己的账号,开通属于自己的库: 第二步:配置git工具: 1.在创建完成自己的库之后,下面就要让自己的电脑克隆一个自己所创建的库 ...

  6. gitLab ssh密匙配置

    一.创建账号 在gitLab上创建一个账号账号:qimeijun@iworku.com 2.设置账户信息 创建完账号,在本地全局设置账号信息打开git命令行工具,输入一下命令: git config ...

  7. 安装 ssh 的公开密匙到 iPhone 上

    1). 在Mac的终端上产生密匙 ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to sa ...

  8. 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!...

    为什么80%的码农都做不了架构师?>>>    Himi  原创, 欢迎转载,转载请在明显处注明! 谢谢. 原文地址:http://blog.csdn.net/xiaominghim ...

  9. Git创建ssh密匙时报错Too many arguments解决方法

    Git创建ssh密匙时报错Too many arguments解决方法 参考文章: (1)Git创建ssh密匙时报错Too many arguments解决方法 (2)https://www.cnbl ...

  10. xor java_java基于密匙的xor加解密

    package iminto.util.common; import java.io.IOException; import java.security.NoSuchAlgorithmExceptio ...

最新文章

  1. C语言经典例80-猴子分桃
  2. python趣味编程入门 迈克 桑德斯_Python趣味编程入门
  3. Opencv中常见的滤波方法
  4. Windows 下单机最大TCP连接数
  5. 可做fft分析吗_小吃店生意好做吗,小吃业行情分析
  6. instanceof关键字
  7. url 特殊字符 传递参数解决方法
  8. shiro java配置,InI 配置 - 跟我学 Apache Shiro_教程_Java开发社区
  9. 20175223 MySQL
  10. Windows Server 2012学习
  11. python thread模块_【Python@Thread】thread模块
  12. dos命令行设置网络优先级_网络工程师必知的Linux命令,精品!
  13. 输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)
  14. 弹簧设计计算软件简介
  15. 华为鸿蒙操作系统国美通讯,国美通讯(600898)03月14日14:30大单揭秘
  16. 苹果cookie是打开还是关闭_如何避免苹果safari自带浏览器“跟踪”你的信息!
  17. HDU - 3533 Escape
  18. 在gitee码云上搭建一个网站
  19. .net中对象名无效问题解决
  20. xshell-xftp

热门文章

  1. 东北大学金工实习理论考试重点
  2. C语言实现学生成绩管理系统
  3. 系统集成项目管理工程师计算题(成本管理计算)
  4. 如何通过电影种子名选择合适的电影
  5. Java程序设计基础(第五版)期末总复习
  6. 关于 tp5 事务操作总结
  7. php5.0手册,tp5.0 开发手册下载|
  8. 计算机一级cad试题,全国计算机等级考试一级试题与答案(25套)(1)2
  9. pytorch下载加载mnist数据集
  10. C语言结构体实例演示