微信h5支付 php

    /**
     * 微信h5支付
     */
    public function wxh5Pay($price,$order,$body)
    {
        $opts = [
            'appid' => $this->config->item('appid'),//appid
            'mch_id' => $this->config->item('mch_id'),//商户号
            'nonce_str' => md5(time() . mt_rand(1000, 9999)),
            'body' => $body,
            'out_trade_no' => $order,
            'total_fee' => $price*100,
            'spbill_create_ip' => $this->input->ip_address(),
            'notify_url' => base_url() . 'Weixinpay/wxpay_back',   //支付成功通知地址
            'trade_type' => 'MWEB',
            'scene_info' => '{"h5_info": {"type":"Wap","wap_url": "'.base_url().'","wap_name": "xxxxx活动"}}'
        ];
        $opts['sign'] = $this->getSign($opts);
        $xml = $this->array2xml($opts);
        $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
        $ch = curl_init();
        //设置超时
        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);
        //post提交方式
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
        //运行curl
        $data = curl_exec($ch);
        curl_close($ch);
        $res = $this->xml2array($data);
        if ($res['return_code'] == 'SUCCESS' && $res['return_msg'] == 'OK') {
            $uri = 'www.baidu.com';//支付成功后跳转的页面
            $url = urlencode($uri);
            $config = [
                'mweb_url' => $res['mweb_url'].'&redirect_url='.$url //返回的是一个url  给前端直接跳转
            ];
        }else{
            $config['errmsg'] = $res['return_msg'];
            $config['errcode'] = $res['return_code'];
        }
        return $config;

    }

        //数组转xml
        private function array2xml($array)
{
    $xml = "<xml>" . PHP_EOL;
    foreach ($array as $k => $v) {
        if ($v && trim($v) != '')
            $xml .= "<$k><![CDATA[$v]]></$k>" . PHP_EOL;
    }
    $xml .= "</xml>";
    return $xml;
}


        //xml转数组
        private function xml2array($xml)
{
    $array = array();
    $tmp = null;
    try {
        $tmp = (array)simplexml_load_string($xml);
    } catch (Exception $e) {
    }
    if ($tmp && is_array($tmp)) {
        foreach ($tmp as $k => $v) {
            $array[$k] = (string)$v;
        }
    }
    return $array;
}


        //签名
        function getSign($data)
{
    ksort($data);
    $string1 = "";
    foreach ($data as $k => $v) {
        if ($v && trim($v) != '') {
            $string1 .= "$k=$v&";
        }
    }
    $stringSignTemp = $string1 . "key=".$this->config->item('key');//公众号密钥
    $sign = strtoupper(md5($stringSignTemp));
    return $sign;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值