比较原生,不懂可以在下面评论区留言,看到我会回复,也可以加QQ问 1152596875
<?php
/**
微信支付模式一和模式二通用代码
*/
class aliPay{
#key为商户平台设置的密钥key 支付秘钥需
const KEY = '';
const UOURL = 'https://api.mch.weixin.qq.com/pay/unifiedorder'; //无需更改 统一下单API地址
const APPID = ''; //APPID需要更改为自己的
const MCHID = ''; //商户号需要更改成自己的
const SECRET = ''; //开发者密码需要更改为自己的
const NOTIFY = ''; //支付通知地址需要更改成你自己服务器的地址
#获取签名
public function getSign($param){
array_filter($param);
#排序
ksort($param);
#拼接上key
$param=urldeocde(http_build_query($param)).'&key='.self::KEY;
#加密 生成签名
return md5(strtoupper($param));
}
#获取带签名的数组
public function setSign($arr){
$arr['sign'] = $this->getSign($arr);
return $arr;
}
#校验签名
public function checkSign($arr){
//生成新签名
$sign = $this->getSign($arr);
//和数组中原始签名比较
if($sign == $arr['sign']){
return true;
}else{
return false;
}
}
#统一下单
public function unifiedorder($params){
//获取到带签名的数组
$params = $this->setSign($params);
//数组转xml
$xml = $this->ArrToXml($params);
//发送数据到统一下单API地址
$data = $this->postStr(self::UOURL, $xml);
$arr = $this->XmlToArr($data);
if($arr['result_code'] == 'SUCCESS' && $arr['return_code'] == 'SUCCESS'){
return $arr;
}else{
$this->logs('error.txt', $data);
return false;
}
}
#生成支付二维码链接,使用phpqrcode类库实现地址
public function getcodeImg($product_id,$pid,$total_fee){
$params = [
'appid'=> self::APPID,
'mch_id'=> self::MCHID,
'nonce_str'=>md5(time()),
'body'=> '扫码支付模式二',
'out_trade_no'=> $pid,
'total_fee'=>$total_fee,
'spbill_create_ip'=>$_SERVER['SERVER_ADDR'],
'notify_url'=> self::NOTIFY,
'trade_type'=>'NATIVE',
'product_id'=>$pid
];
$arr=$this->unifiedorder($params);
return $arr['code_url'];
}
#生成日志 用于错误记录 并记录
public function record($filename,$data){
if(is_array($data)?print_r($data,true):$data);
file_put_contents($filename, $data);
}
#Xml 文件转数组
public function XmlToArr($xml)
{
if($xml == '') return '';
libxml_disable_entity_loader(true);
$arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $arr;
}
#数组转XML
public function ArrToXml($arr)
{
if(!is_array($arr) || count($arr) == 0) return '';
$xml = "<xml>";
foreach ($arr as $key=>$val)
{
if (is_numeric($val)){
$xml.="<".$key.">".$val."</".$key.">";
}else{
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
}
$xml.="</xml>";
return $xml;
}
#post 字符串到接口
public function postStr($url,$postfields){
$ch = curl_init();
$params[CURLOPT_URL] = $url; //请求url地址
$params[CURLOPT_HEADER] = false; //是否返回响应头信息
$params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
$params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向
$params[CURLOPT_POST] = true;
$params[CURLOPT_SSL_VERIFYPEER] = false;//禁用证书校验
$params[CURLOPT_SSL_VERIFYHOST] = false;
$params[CURLOPT_POSTFIELDS] = $postfields;
curl_setopt_array($ch, $params); //传入curl参数
$content = curl_exec($ch); //执行
curl_close($ch); //关闭连接
return $content;
}
}