微信扫码支付,公众号支付

<?php



# 微信统一下单接口
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';


$param = [
    'appid' => '公众号id',
    'mch_id' => '商户id',
    'nonce_str' =>uniqid(),
    'sign_type' => 'MD5',
    'body' => 'test',
    'detail' => 'test detail',
    'out_trade_no' => date('Ymd').rand(10000,99999),
    'total_fee' => 1,
    'notify_url' => 'http://www.test.top/testpay/pay.php',
    'trade_type' =>'JSAPI',
];


ksort( $param );

$sign_str = urldecode(http_build_query( $param ));


$sign_str .= '&key=商户密钥';


//echo $sign_str;exit;

$sign_str = md5( $sign_str );


$param['sign'] = strtoupper( $sign_str );

function CurlPost($url, $param = [],  $is_post = 1,  $timeout = 5 )
{

    //初始化curl
    $curl = curl_init();

    // 设置请求的路径
    curl_setopt($curl, CURLOPT_URL, $url);

    if ($is_post == 1) {
        //设置POST提交
        curl_setopt($curl, CURLOPT_POST, 0);
    }

    //显示输出结果  1代表 把接口返回的结果当作一个字符串处理
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    // 设置请求超时时间
    curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);

    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);


    if ($is_post == 1) {
        //提交数据 -- 设置post提交的数据
        if (is_array($param)) {

            //http_build_query
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($param));
        } else {
            curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
        }
    }

    //执行请求
    $data = $data_str = curl_exec($curl);
    //处理错误
    if ($error = curl_error($curl)) {
        $log_data = array(
            'url' => $url,
            'param' => $param,
            'error' => '<span style="color:red;font-weight: bold">' . $error . '</span>',
        );

        var_dump($log_data);
        exit;
    }

    # 关闭CURL
    curl_close($curl);


    //json数据转换为数组
    $data = json_decode($data, true);

    if (!is_array($data)) {
        $data = $data_str;
    }

    #调用玩接口之后写一个日志
    $log = [
        'url' => $url,
        'param' => $param,
        'response' => $data_str
    ];
    file_put_contents(__DIR__ . '/wechat.log', print_r($log, true), 8);

    return $data;

}
function arr2Xml( $arr ){

    $xml = '<xml version="1.0" encoding="UTF-8"> ';
    foreach(  $arr as $key => $value ){
        if (is_numeric($value)){
            $xml.="<".$key.">".$value."</".$key.">";
        }else{
            $xml.="<".$key."><![CDATA[".$value."]]></".$key.">";
        }

    }
    $xml .= '</xml>';
    return $xml;
}

$xml = arr2Xml( $param );

$result = CurlPost( $url , arr2Xml($param)  );


$api_arr = json_decode(  json_encode(simplexml_load_string( $result , 'SimpleXMLElement', LIBXML_NOCDATA) ), true );

if( $api_arr['return_code'] == 'SUCCESS' ){

    include __DIR__ . '/phpqrcode.php';
    header('content-type:image/png');
    echo Qrcode::png( $api_arr['code_url'] , false , 'H' , 6 ,2 );
}
<?php

#微信统一下单接口
$url='https://api.mch.weixin.qq.com/pay/unifiedorder';

$param=[
    #公众账号ID
    'appid'=>'****',
    'mch_id'=>'***',
    'nonce_str'=>uniqid(),
    'sign_type'=>'MD5',
    'body'=>'test',
    'detail'=>'detail',
    'out_trade_no'=>date('Ymd').rand(10000,99999),
    'total_fee'=>1,
    'spbill_create_ip'=>$_SERVER['SERVER_ADDR'],
    'notify_url'=>'http://****/test.php',
    'trade_type'=>'NATIVE',
];
ksort($param);

$sign_str=urldecode(http_build_query($param));

$sign_str.='&key=8934e7d15453e97507ef794cf7b0519d';

$sign_str=md5($sign_str);

$param['sign']=strtoupper($sign_str);

//print_r($param);exit;
function CurlPost($url, $param = [],  $is_post = 1,  $timeout = 5 )
{
    //初始化curl
    $curl = curl_init();

    // 设置请求的路径
    curl_setopt($curl, CURLOPT_URL, $url);

    if ($is_post == 1) {
        //设置POST提交
        curl_setopt($curl, CURLOPT_POST, 0);
    }

    //显示输出结果  1代表 把接口返回的结果当作一个字符串处理
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    // 设置请求超时时间
    curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);

    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);


    if ($is_post == 1) {
        //提交数据 -- 设置post提交的数据
        if (is_array($param)) {

            //http_build_query
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($param));
        } else {
            curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
        }
    }

    //执行请求
    $data = $data_str = curl_exec($curl);
    //处理错误
    if ($error = curl_error($curl)) {
        $log_data = array(
            'url' => $url,
            'param' => $param,
            'error' => '<span style="color:red;font-weight: bold">' . $error . '</span>',
        );

        var_dump($log_data);
        exit;
    }

    # 关闭CURL
    curl_close($curl);


    //json数据转换为数组
    $data = json_decode($data, true);

    if (!is_array($data)) {
        $data = $data_str;
    }

    #调用玩接口之后写一个日志
    $log = [
        'url' => $url,
        'param' => $param,
        'response' => $data_str
    ];
    file_put_contents(__DIR__ . '/wechat.log', print_r($log, true), 8);

    return $data;

}

function arrzxml($arr){
    $xml='<xml version="1.0" encoding="UTF-8">';
    foreach($arr as $key=>$value){
        if(is_numeric($value)){
            $xml.="<".$key.">".$value."</".$key.">";
        }else{
            $xml.="<".$key."><![CDATA[".$value."]]></".$key.">";
        }

    }
    $xml.='</xml>';
//    var_dump($xml);exit;
    return $xml;

}

$xml=arrzxml($param);
$result=CurlPost($url,arrzxml($param));
//echo '<pre/>';
var_dump($result);
exit;
$api_arr=json_decode(simplexml_load_string($result,'SimpleXMLElement',LIBXML_NOCDATA),true);
if($result['return_code']=='SUCCESS'){
    include __DIR__.'/phpqrcode.php';
    header('content-type:image/png');
    echo Qrcode::png($api_arr['code_url'],false,'H',6,2);

}










 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇葩也是花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值