微信支付三种模式归档【原生】

依赖方法Curl get post 和post证书 arr转xml xml转array sign生成等….

所需公众号appid AppSecret

商户号mchid 证书 商户apikey

小程序appid AppSecret

公众号网页授权目录要把域名录入 商户号支付目录也录入

小程序有自己专属的appid和secret 到微信小程序后台获取

统一下单接口:https://api.mch.weixin.qq.com/pay/unifiedorder
统一退款接口:https://api.mch.weixin.qq.com/secapi/pay/refund

公共函数库代码

/**
 * 获取用户ip
 */
function getip()
{
    return $_SERVER["REMOTE_ADDR"];
}

/**
 * xml转array
 */
function xmlToArray($xml) //xml转Array
{
    //禁止引用外部xml实体
    libxml_disable_entity_loader(true);
    $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
    $val = json_decode(json_encode($xmlstring), true);
    return $val;
}

// 对象转数组
function object_to_array($obj){
    $_arr=is_object($obj)?get_object_vars($obj):$obj;
    $arr = null;
    foreach($_arr as $key=>$val){
        $val=(is_array($val))||is_object($val)?$this->object_to_array($val):$val;
        $arr[$key]=$val;
    }
    return $arr;
}
//array转xml
    function arrayToXml($data, $root = true)
    {
        $str="";
        if($root)$str .= '<?xml version="1.0" encoding="UTF-8"?>';
        foreach($data as $key => $val){
            //去掉key中的下标[]
            $key = preg_replace('/\[\d*\]/', '', $key);
            if(is_array($val)){
                $child = arrayToXml($val, false);
                $str .= "<$key>$child</$key>";
            }else{
                $str.= "<$key>$val</$key>";
            }
        }
        return $str;
    }
/**
 * 生成sign签名
 */
function unifiedsign($data, $key) //获取sign值方法
{
    ksort($data);
    //数组转成URL键值对并拼接商户key
    $str = urldecode(http_build_query($data) . "&key=" . $key);
    //MD5加密并转成大写
    return strtoupper(md5($str));
}

/**
 * postcurl退款附带证书
 */
function postXmlSSLCurl($url,$xmlrefundorder,$second=30)
{
    $ch = curl_init();
    //超时时间
    curl_setopt($ch,CURLOPT_TIMEOUT,$second);
    //这里设置代理,如果有的话
    //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
    //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
    curl_setopt($ch,CURLOPT_URL, $url);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
    //设置header
    curl_setopt($ch,CURLOPT_HEADER,FALSE);
    //要求结果为字符串且输出到屏幕上
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
    //设置证书
    //使用证书:cert 与 key 分别属于两个.pem文件
    //默认格式为PEM,可以注释
    curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
    //放在根目录
    curl_setopt($ch,CURLOPT_SSLCERT,'cert/apiclient_cert.pem');
    //默认格式为PEM,可以注释
    curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
    curl_setopt($ch,CURLOPT_SSLKEY,'cert/apiclient_key.pem');
    //post提交方式
    curl_setopt($ch,CURLOPT_POST, true);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$xmlrefundorder);
    $data = curl_exec($ch);
    //返回结果
    if($data){
        curl_close($ch);
        return $data;
    }else {
        $error = curl_errno($ch);
        echo "curl出错,错误码:$error"."<br>";
        curl_close($ch);
        return false;
    }
}

/**
 * Post方法curl
 */
function postdata($url, $data)//统一下单等使用
{
    //$data = 'XML或者JSON等字符串';
    $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_POSTFIELDS] = $data;

    //防止curl请求 https站点报错 禁用证书验证
    $params[CURLOPT_SSL_VERIFYPEER] = false;
    $params[CURLOPT_SSL_VERIFYHOST] = false;

    curl_setopt_array($ch, $params); //传入curl参数

    $content = curl_exec($ch); //执行
    curl_close($ch); //关闭连接
    return $content;
}

/**
 * get方式的Curl
 */
function sendRequest($url)//静默授权时使用
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    return json_decode($output, true);
}

config文件配置api

   //微信支付
'weixinpay_config'               => [
'appid'      => 'wx6c99725',//微信公众号的appid
'apikey' =>'TY59erWxgf96qw3n',////https://pay.weixin.qq.com 商户平台API秘钥
'mchid'  => '1234302',////微信支付商户号 PartnerID 通过微信支付商户资料审核后邮件发送
'key' => 'a7b33fb44a0943731f',//微信支付申请对应的公众号的AppSecret
'notify_url' => 'https://xxx.cn/notify_url',//微信支付回调地址
'refund_notify_url' => 'https://xxx.cn/refund_notify_url',//退款回调
'redirect_uri'=>'https://xxx314.cn//getOpenid',//微信授权用户回调地址(微信平台填写域名)
// 开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息
],  

为您推荐