微信扫码支付模式一模式二我封装的代码

比较原生,不懂可以在下面评论区留言,看到我会回复,也可以加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;
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_33919941/article/details/86806628
今日推荐