<?php
namespace pay\wxpay;
/**
* 2015-06-29 修复签名问题
* */
require_once "WxPay.Config.php";
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();
}
}
/**
*
* 回调基础类
* @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);
}
/**
没有合适的资源?快使用搜索试试~ 我知道了~
最简单的YII2.0 微信支付接口
共14个文件
php:10个
html:2个
pem:2个
4星 · 超过85%的资源 需积分: 50 141 下载量 170 浏览量
2016-01-08
10:56:50
上传
评论 1
收藏 27KB ZIP 举报
温馨提示
最简单的YII2.0 微信支付接口,操作文档地址www.phpman.cn/archives/71.html
资源推荐
资源详情
资源评论
收起资源包目录
wxpay.zip (14个子文件)
wxpay
cert
apiclient_key.pem 2KB
apiclient_cert.pem 2KB
nativepay.html 2KB
wxpay.php 6KB
weixin.html 2KB
lib
WxPay.Config.php 3KB
notify.php 1KB
WxPay.Exception.php 232B
WxPay.Api.php 24KB
WxPay.WapPay.php 1KB
WxPay.Notify.php 3KB
WxPay.Data.php 79KB
WxPay.JsApiPay.php 9KB
WxPay.NativePay.php 1KB
共 14 条
- 1
一品武夫
- 粉丝: 10
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页