美文网首页
微信扫码支付模式二-快速实现

微信扫码支付模式二-快速实现

作者: 表弟_212 | 来源:发表于2019-01-17 10:39 被阅读0次

    开发者编号APPID: 在【微信公众平台】->开发->基本配置中获取
    开发者密钥APPSECRET:在【微信公众平台】->开发->基本配置中获取


    商户号MCHID: 在【商户平台】->产品中心->开发配置中获取
    商户支付密钥KEY:在【商户平台】->账户中心->API安全中获取
    证书文件: 在【商户平台】->账户中心->API安全中下载证书


    image.png image.png
    <?php
    
    class Util
    {
    
        /**
         * PHP发送请求
         * @param string $api       接口地址
         * @param mixed  $postData  POST请求数据
         */
        public static function httpRequest($api, $postData)
        {
            //1.初始化
            $ch = curl_init();
            //2.配置
                //2.1设置请求地址
                curl_setopt($ch, CURLOPT_URL, $api);
                //2.2数据流不直接输出
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                //2.3POST请求
                if ($postData) {
                    curl_setopt($ch, CURLOPT_POST, true);
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
                }
                //curl注意事项,如果发送的请求是https,必须要禁止服务器端校检SSL证书
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            //3.发送请求
            $data = curl_exec($ch);
            //4.释放资源
            curl_close($ch);
            return $data;
        }
    
        /**
         * 将XML文档转化为数组
         * @param  string $xml XML文档
         * @return array
         */
        public static 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文档
         * @param  array  $arr 数组
         * @return string
         */
        public static 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; 
        }
    }
    
    class Wxpay 
    { 
        const APPID   =想要吗》私聊我 QQ 1152596875   //开发者编号
        const SECRET  =想要吗》私聊我 QQ 1152596875   ;//开发者密钥
        const MCHID   = 想要吗》私聊我 QQ 1152596875  ;                       //商户号
        const KEY =      //支付秘钥
        const NOTIFY_URL =   //支付成功回调的url
    
        public function getSign($params)
        {
            //0.移除sign
            if (isset($params['sign'])) unset($params['sign']);
            //1.参数名ASCII码从小到大排序(字典序)
            ksort($params);
            //2.组装字符串,键值对形式 &  md5加密 & 转化为大写
            $str = http_build_query($params) . '&key=' . self::KEY;
            $str = strtoupper(md5(urldecode($str)));
            //3.返回签名
            return $str;
        }
      
    
        public function getUrl($pid, $price = 1)
        {
            $params = [
                'appid'        => self::APPID,
                'mch_id'       => self::MCHID,
                'nonce_str'    => md5(time()),
                'body'         => '扫码支付模式二',
                'out_trade_no' => date('YmdHis'),
                'total_fee'    => $price,
                'spbill_create_ip'=> $_SERVER['SERVER_ADDR'],
                'notify_url'      => self::NOTIFY_URL,
                'trade_type'      => 'NATIVE',
                'product_id'      => $pid
            ];
            $params['sign'] = $this->getSign($params);
    
            //数组转xml
            $xml = Util::ArrToXml($params);
            //发送数据到统一下单API地址
            $data = Util::httpRequest('https://api.mch.weixin.qq.com/pay/unifiedorder', $xml);
            $arr =  Util::XmlToArr($data);
            //判断结果
            if($arr['result_code'] == 'SUCCESS' && $arr['return_code'] == 'SUCCESS')
            {
                return $arr['code_url'];
            }else{
                return false;
            }
        }
    
    }
    
    //1.引入PHP生成二维码类库
    include './phpqrcode/phpqrcode.php';
    //2.获取要生成二维码的文本
    $url = (new Wxpay)->getUrl(1);
    //3.生成二维码
    QRcode::png($url);
    

    比较原生,不懂可以在下面评论区留言,看到我会回复
    ---转载的话记得加上来自来哪!!!!

    相关文章

      网友评论

          本文标题:微信扫码支付模式二-快速实现

          本文链接:https://www.haomeiwen.com/subject/fkwbdqtx.html