H5微信支付,微信外掉起

微信官方文档:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1
1、域名,前后端一定要使用正确的域名,IP+端口配置不行
2、文档中的’场景信息’这个参数不需要填写,填写了反而报错了
3、微信app支付中使用的是appid为微信开放平台应用的appid,这里使用的是微信公众号的appid

 /**
 * H5掉起微信,在微信外掉起
 */
public function h5wxpay($order_id){
    header('content-type:text/html;charset=utf-8');
    $m_order = Db::name("order");

    $order_map['id'] = $order_id;
    $order_data = $m_order->where($order_map)->find();
    $money = $order_data['money'];

    $appid = "***********";   #微信公众号appid   
    $key = "**********************";     #商户key     商户平台->账户中心->api安全->设置api秘钥
    $mch_id = "********";   #商户号

    if($order_data['status'] == 1){
        $body='购买课程';
    }elseif($order_data['status'] == 2){
        $body='购买课测评';
    }elseif($order_data['status'] == 3){
        $body='购买课咨询';
    }elseif($order_data['status'] == 4){
        $body='购买会员';
    }elseif($order_data['status'] == 5){
        $body='充值';
    }
    #dump($order_data);die;
    $nonce_str = strtoupper(md5(time()));   #随机字符串
    $out_trade_no = $order_data['order'];    #订单号
    $total_fee = $money * 100;//总金额   最少为1分,应为金额*100,分为单位,不能出现小数
    $spbill_create_ip = $_SERVER['REMOTE_ADDR'];    #ip
    $www_url = $_SERVER['HTTP_HOST'];
    
    $notify_url = "http://".$www_url."/******/******/******"; //接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。
    
    #$scene_info = json_encode(['h5_info'=>['type'=>'Wap','wap_url'=> '***************','wap_name'=>'知会教育']]);
    $trade_type = 'MWEB';    //支付类型,固定值
    $stringA = "appid={$appid}&body={$body}&mch_id={$mch_id}&nonce_str={$nonce_str}&notify_url={$notify_url}&out_trade_no={$out_trade_no}&spbill_create_ip={$spbill_create_ip}&total_fee={$total_fee}&trade_type={$trade_type}";
    $stringSignTemp = $stringA."&key=".$key;
    $sign=strtoupper(md5($stringSignTemp));
    $postData =
        "<xml>
    <appid>{$appid}</appid>
    <body>{$body}</body>
    <mch_id>{$mch_id}</mch_id>
    <nonce_str>{$nonce_str}</nonce_str>
    <notify_url>{$notify_url}</notify_url>
    <out_trade_no>{$out_trade_no}</out_trade_no>
    <spbill_create_ip>{$spbill_create_ip}</spbill_create_ip>
    <total_fee>{$total_fee}</total_fee>
    <trade_type>{$trade_type}</trade_type>
    <sign>{$sign}</sign>
    </xml>";
    #dump($postData);
    $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
    $dataxml = postXmlCurl($url,$postData);
    #dump($dataxml);die;
    #mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,直接访问该链接会报商家参数错误,应该在程序中跳转
    $this->success("success",$dataxml['mweb_url']);
}


function postXmlCurl($url,$xml)
{

    $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);
    $objectxml = (array)simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);
    //         $data = $this->xml_to_json($data);
    return $objectxml;
    //         dump($objectxml);die;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值