<?php
/**
* 2015-06-29 修复签名问题
**/
require_once "WxPay.Exception.php";
/**
*
* 数据对象基础类,该类中定义数据类最基本的行为,包括:
* 计算/设置/获取签名、输出xml格式的参数、从xml读取数据对象等
* @author widyhu
*
*/
class WxPayDataBase
{
protected $values = array();
/**
* 设置签名,详见签名生成算法
* @param string $value
**/
public function SetSign()
{
$sign = $this->MakeSign();
$this->values['sign'] = $sign;
return $sign;
}
/**
* 获取签名,详见签名生成算法的值
* @return 值
**/
public function GetSign()
{
return $this->values['sign'];
}
/**
* 判断签名,详见签名生成算法是否存在
* @return true 或 false
**/
public function IsSignSet()
{
return array_key_exists('sign', $this->values);
}
/**
* 输出xml字符
* @throws WxPayException
**/
public function ToXml()
{
if(!is_array($this->values)
|| count($this->values) <= 0)
{
throw new WxPayException("数组数据异常!");
}
$xml = "<xml>";
foreach ($this->values as $key=>$val)
{
if (is_numeric($val)){
$xml.="<".$key.">".$val."</".$key.">";
}else{
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
}
$xml.="</xml>";
return $xml;
}
/**
* 将xml转为array
* @param string $xml
* @throws WxPayException
*/
public function FromXml($xml)
{
if(!$xml){
throw new WxPayException("xml数据异常!");
}
//将XML转为array
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
$this->values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $this->values;
}
/**
* 格式化参数格式化成url参数
*/
public function ToUrlParams()
{
$buff = "";
foreach ($this->values as $k => $v)
{
if($k != "sign" && $v != "" && !is_array($v)){
$buff .= $k . "=" . $v . "&";
}
}
$buff = trim($buff, "&");
return $buff;
}
/**
* 生成签名
* @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值
*/
public function MakeSign()
{
//签名步骤一:按字典序排序参数
ksort($this->values);
$string = $this->ToUrlParams();
//签名步骤二:在string后加入KEY
$string = $string . "&key=".WxPayConfig::KEY;
//签名步骤三:MD5加密
$string = md5($string);
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
return $result;
}
/**
* 获取设置的值
*/
public function GetValues()
{
return $this->values;
}
}
/**
*
* 接口调用结果类
* @author widyhu
*
*/
class WxPayResults extends WxPayDataBase
{
/**
*
* 检测签名
*/
public function CheckSign()
{
//fix异常
if(!$this->IsSignSet()){
throw new WxPayException("签名错误!");
}
$sign = $this->MakeSign();
if($this->GetSign() == $sign){
return true;
}
throw new WxPayException("签名错误!");
}
/**
*
* 使用数组初始化
* @param array $array
*/
public function FromArray($array)
{
$this->values = $array;
}
/**
*
* 使用数组初始化对象
* @param array $array
* @param 是否检测签名 $noCheckSign
*/
public static function InitFromArray($array, $noCheckSign = false)
{
$obj = new self();
$obj->FromArray($array);
if($noCheckSign == false){
$obj->CheckSign();
}
return $obj;
}
/**
*
* 设置参数
* @param string $key
* @param string $value
*/
public function SetData($key, $value)
{
$this->values[$key] = $value;
}
/**
* 将xml转为array
* @param string $xml
* @throws WxPayException
*/
public static function Init($xml)
{
$obj = new self();
$obj->FromXml($xml);
//fix bug 2015-06-29
if($obj->values['return_code'] != 'SUCCESS'){
return $obj->GetValues();
}
$obj->CheckSign();
return $obj->GetValues();
}
/**
* 将xml转为array(无签名校验)
* @param string $xml
* @throws WxPayException
*/
public static function Init2($xml)
{
$obj = new self();
$obj->FromXml($xml);
if($obj->values['return_code'] != 'SUCCESS'){
return $obj->GetValues();
}
return $obj->GetValues();
}
}
/**
*
* 回调基础类
* @author widyhu
*
*/
class WxPayNotifyReply extends WxPayDataBase
{
/**
*
* 设置错误码 FAIL 或者 SUCCESS
* @param string
*/
public function SetReturn_code($return_code)
{
$this->values['return_code'] = $return_code;
}
/**
*
* 获取错误码 FAIL 或者 SUCCESS
* @return string $return_code
*/
public function GetReturn_code()
{
return $this->values['return_code'];
}
/**
*
* 设置错误信息
* @param string $return_code
*/
public function SetReturn_msg($return_msg)
{
$this->values['return_msg'] = $return_msg;
}
/**
*
* 获取错误信息
* @return string
*/
public function GetReturn_msg()
{
return $this->values['return_msg'];
}
/**
*
* 设置返回参数
* @param string $key
* @param string $value
*/
public function SetData($key, $value)
{
$this->values[$key] = $value;
}
}
/**
*
* 统一下单输入对象
* @author widyhu
*
*/
class WxPayUnifiedOrder extends WxPayDataBase
{
/**
* 设置微信分配的公众账号ID
* @param string $value
**/
public function SetAppid($value)
{
$this->values['appid'] = $value;
}
/**
* 获取微信分配的公众账号ID的值
* @return 值
**/
public function GetAppid()
{
return $this->values['appid'];
}
/**
* 判断微信分配的公众账号ID是否存在
* @return true 或 false
**/
public function IsAppidSet()
{
return array_key_exists('appid', $this->values);
}
/**
* 设置微信支付分配的商户号
* @param string $value
**/
public function SetMch_id($value)
{
$this->values['mch_id'] = $value;
}
/**
* 获取微信支付分配的商户号的值
* @return 值
**/
public function GetMch_id()
{
return $this->values['mch_id'];
}
/**
* 判断微信支付分配的商户号是否存在
* @return true 或 false
**/
public function IsMch_idSet()
{
return array_key_exists('mch_id', $this->values);
}
/**
* 设置微信支付分配的终端设备号,商户自定义
* @param string $value
**/
public function SetDevice_info($value)
{
$this->values['device_info'] = $value;
}
/**
* 获取微信支付分配的终端设备号,商户自定义的值
* @return 值
**/
public function GetDevice_info()
{
return $this->values['device_info'];
}
/**
* 判断微信支付分配的终端设备号,商户自定义是否存在
* @return true 或 false
**/
public function IsDevice_infoSet()
{
return array_key_exists('device_info', $this->values);
}
/**
* 设置随机字符串,不长于32位。推荐随机数生成算法
* @param string $value
**/
public function SetNonce_str($value)
{
$this->values['nonce_str'] = $value;
}
/**
* 获取随机字符串,不长于32位。推荐随机数生成算法的值
* @return 值
**/
public function GetNonce_str()
{
return $this->values['nonce_str'];
}
/**
* 判断随机字符串,不长于32位。推荐随机数生成算法是否存在
* @return true 或 false
**/
public function IsNonce_strSet()
{
return array_key_exists('nonce_str', $this->values);
}
/**
* 设置商品或支付单简要描述
* @param string $value
**/
public function SetBod
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【站长亲测】易支付系统源码无加密无后门带N个支付接口/安装版支付源码 简单测试了一下,很完美的一款支付系统源码,支持的支付接口:支持支付宝官方pc扫码、手机网站支付、支付宝当面付;支持QQ官方扫码支付、手机支付;支持微信pc扫码、jsapi公众号支付、微信h5;官方码支付等等。 环境要求:MySQL5.5+PHP5.4+ 最好是php7以上
资源推荐
资源详情
资源评论
收起资源包目录
站长亲测易支付系统源码无加密无后门带N个支付接口/安装版支付源码
(517个子文件)
open.min.css 357KB
opao.min.css 357KB
open.min.css 357KB
argon.css 340KB
app.min.css 215KB
ionic.min.css 195KB
bootstrap.min.css 140KB
vendor.css 134KB
nifty.min.css 118KB
bootstrap.min.css 114KB
main.css 84KB
app.css 80KB
layui.css 59KB
fortawesome.css 50KB
search0429.css 46KB
indexnew.css 44KB
style.css 34KB
index.css 32KB
global.css 27KB
hui.css 26KB
select2.min.css 19KB
logdy.css 17KB
layer.css 14KB
layer.css 14KB
main.css 10KB
head.css 9KB
suspend.css 8KB
nucleo.css 7KB
nucleo.css 7KB
base1.css 6KB
wechat_pay.css 6KB
userPay.css 5KB
404.css 5KB
layer.css 5KB
dataTables.bootstrap4.min.css 5KB
argon2.css 5KB
vc_base.css 4KB
buttons.bootstrap4.min.css 4KB
select.bootstrap4.min.css 4KB
wechat_pay.css 4KB
alipay_pay.css 4KB
alipay_pay.css 4KB
wechat_pay.css 4KB
mqq_pay.css 4KB
mqq_pay.css 4KB
search-form.css 4KB
themes.css 3KB
icons-extra.css 3KB
common.css 3KB
magic-check.min.css 2KB
op.css 1006B
base.css 641B
app.css 339B
pace.min.css 317B
experience_s.min.css 211B
fa-solid-900.eot 176KB
ionicons.eot 118KB
fa-brands-400.eot 116KB
fa-regular-400.eot 40KB
iconfont.eot 39KB
loading.gif 14KB
alipay.gif 13KB
weixin.gif 7KB
loading-0.gif 6KB
qqpay.gif 3KB
loading-2.gif 2KB
load.gif 701B
load.gif 701B
loading-1.gif 701B
hm(1).gif 43B
hm(6).gif 43B
hm.gif 43B
hm(7).gif 43B
hm(2).gif 43B
hm(5).gif 43B
hm(3).gif 43B
hm(4).gif 43B
readme.html 70B
alipay.ico 4KB
tenpay.ico 1KB
qqpay.ico 1KB
wechat.ico 1KB
team-1.jpg 198KB
img-1-1000x600.jpg 92KB
bg-uaspay5.jpg 85KB
landing-1.jpg 82KB
landing-3.jpg 75KB
landing-2.jpg 64KB
qiandao.jpg 63KB
news1.jpg 57KB
banner1.jpg 57KB
banner3.jpg 57KB
banner2.jpg 50KB
news2.jpg 49KB
bg-admin.jpg 48KB
news3.jpg 44KB
news4.jpg 40KB
banner4.jpg 34KB
activitybg.jpg 24KB
timg(3).jpg 23KB
共 517 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
破碎的天堂鸟
- 粉丝: 7596
- 资源: 1983
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功