h5支付就是纯手机浏览器调起微信支付,跟微信公众号和微信浏览器是没有关系的

下面附上步骤,

1.在微信商户平台申请H5支付

2.然后调用这个H5接口,必须的参数如下

//在微信开放平台中的 
$appid = "wxf1f965af5c26f7f";$AppSecret  = "306d3e8f126b1b840fcce6ac6a516re3";
 
//在微信商户平台中的 
$mch_id = "1497359772";  //商户号,在商户平台中查看$key=00fBubLbb0kg9ub9fH13By31s2rlxHRS";    //商户支付密钥

3.下面附上代码

//调取微信支付
	public function index(){
		$order_id = I('order_id/d',0); // 订单id                        
        $master_order_sn = I('master_order_sn','');// 多单付款的 主单号

        // 如果是主订单号过来的, 说明可能是合并付款的
        if($master_order_sn)
        {
            M('order')->where("master_order_sn",$master_order_sn)->save(array('pay_code'=>'weixin','pay_name'=>'H5微信支付'));            
            $order = M('order')->where("master_order_sn",$master_order_sn)->find();
            $order['order_sn'] = $master_order_sn; // 临时修改 给支付宝那边去支付
            $order['order_amount'] = M('order')->where("master_order_sn",$master_order_sn)->sum('order_amount'); // 临时修改 给支付宝那边去支付
        }else{
            M('order')->where("order_id" , $order_id)->save(array('pay_code'=>'weixin','pay_name'=>'H5微信支付'));            
            $order = M('order')->where("order_id" , $order_id)->find();     
        }
        if($order['pay_status'] == 1){
            $this->error('此订单,已完成支付!');
        }

        // 文档中说的,价格 单位是分
		$money = $order['order_amount']*100; //商品价格
		// 前台请求的参数
		$title = "致礼商城";
		$userid = $order['user_id'];
		$time = time();		$nonce_str = "hcuasduvihasdiovjerjgvujsaru"; //随机字符串
		$appid = "wxf1f965agdc26f67f"; //在微信开放平台中的 appid(先要创建一个移动应用)
		$mch_id = "1497857772";  //商户号,在商户平台中查看
		$key = "306d3e8f126b16hi0fcce6ac6a51617b"; //在微信开放平台中的 AppSecret
		$notify_url = "http://www.goods.com/index.php/Mobile/Payment2/callbackUrl"; //用户支付完后微信会来触发这个脚本,是处理业务逻辑的地方
		//订单号可以灵活使用,比如我这个地方把userid加进去,在异步回调的时候方便直接操作用户
		$out_trade_no = $order['order_sn'];   //支付成功微信返回订单号		// 下面的参数含义直接看文档
		$tmpArr = array(
		    'appid'=>$appid,   //不要填成了 公众号原始id
		    'attach'=>$title,
		    'body'=>$title,
		    'mch_id'=>$mch_id,
		    'nonce_str'=>$nonce_str,      
		    'notify_url'=>$notify_url,
		    'out_trade_no'=>$out_trade_no, 
		    'spbill_create_ip'=>$this->ip(),
		    'total_fee'=>$money,
		    'trade_type'=>'MWEB' 
		    );
		// 签名逻辑官网有说明,签名步骤就不解释了
		ksort($tmpArr);  		$buff = "";
		foreach ($tmpArr as $k => $v)
		{
		   $buff .= $k . "=" . $v . "&";
		}
		$buff = trim($buff, "&");
		$stringSignTemp=$buff."&key=00fBubLbbqe570bJxH13By31s2rlxHRS";    //商户支付密钥
		$sign= strtoupper(md5($stringSignTemp)); //签名		$xml = "<xml>
		           <appid>".$appid."</appid>
		           <attach>".$title."</attach>
		           <body>".$title."</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>".$this->ip()."</spbill_create_ip>     
		           <total_fee>".$money."</total_fee>
		           <trade_type>MWEB</trade_type>          
		         <sign>".$sign."</sign>
		        </xml> ";		$posturl = "https://api.mch.weixin.qq.com/pay/unifiedorder";
		$ch = curl_init($posturl);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
		curl_setopt($ch, CURLOPT_POST, 1);  
		curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 
		$response = curl_exec($ch);  
		curl_close($ch);		$xmlobj = json_decode(json_encode(simplexml_load_string($response, 'SimpleXMLElement', LIBXML_NOCDATA ))); 
		// dump($xmlobj);die;
		$wurl = $xmlobj->mweb_url;
		echo "<script>location.href='".$wurl."'</script>";
	}
	//获取客户端IP
	function ip() {	    if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
	        $ip = getenv('HTTP_CLIENT_IP');
	    } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
	        $ip = getenv('HTTP_X_FORWARDED_FOR');
	    } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
	        $ip = getenv('REMOTE_ADDR');
	    } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
	        $ip = $_SERVER['REMOTE_ADDR'];
	    }
	    return preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
	}
	//调取微信回掉
	public function callbackUrl(){
		// 本脚本的业务逻辑只是个例子,仅供参考		// 拿到原始数据并通过xml类解析为对象
		$postObj = simplexml_load_string(file_get_contents("php://input"), 'SimpleXMLElement', LIBXML_NOCDATA );
		// 你可以通过下面这种方式来看一下微信究竟返回了那些参数,请保证log.php存在并且有写权限
		// file_put_contents("/log.php",file_get_contents("php://input"));
		// file_put_contents(__DIR__. '/joijijlklj.txt', file_get_contents("php://input"));
		// file_put_contents(dirname(__file__)."/log.php",file_get_contents("php://input"));
		$arr = array();
		foreach ($postObj as $key => $value) {
		    $arr[$key] = $value;
		} 
		// 订单状态
		$status = $arr['result_code'];		if(trim($status) == "SUCCESS") {
		    // 微信订单
		    $transaction_id = $arr['transaction_id'];		        // 价格
		        $money = $arr['total_fee']/100;
		        // 在商户订单号中提取用户id,上一个脚本中我说了这个商户订单号可以灵活使用
		        $order_sn = $arr['out_trade_no'];
		        // file_put_contents(__DIR__. '/lplplplplplplp.txt', $transaction_id.'---'.$order_sn);
		        // 在数据库中检查这个订单号是否已经处理过了 以免重复处理,因为很多原因微信可能多次触发本脚本
		        // checkrepeat(orderid);
		        $this->chuli($order_sn,$transaction_id);
		        // 处理完逻辑 返回这个xml数据,告诉微信服务器,这个订单号已经处理完了 不要在来骚扰我了
		        $xml = "
		                <xml>
		                  <return_code><![CDATA[".$status."]]></return_code>
		                  <return_msg><![CDATA[OK]]></return_msg>
		                </xml>";
		        echo $xml;

		}
	}
	//处理业务逻辑
	public function chuli($order_sn,$transaction_id){
		// 先查看一下 是不是 合并支付的主订单号
        $order_list = M('order')->where("master_order_sn", $order_sn)->select();
        if ($order_list) {
            foreach ($order_list as $key => $val)
                update_pay_status($val['order_sn'], $transaction_id);
            return;
        }
        // 如果这笔订单已经处理过了
        $count = M('order')->master()->where(['order_sn' => $order_sn, 'pay_status' => 0])->count();   // 看看有没已经处理过这笔订单  支付宝返回不重复处理操作
        if ($count == 0)
            return false;
        // 找出对应的订单
        $order = M('order')->master()->where("order_sn", $order_sn)->find();
        $order1 = M('order')->where("order_sn", $order_sn)->find();
        $order2 = M('users')->where("user_id", $order['user_id'])->find();
        // 修改支付状态  已支付
        M('order')->where("order_sn", $order_sn)->save(array('pay_status' => 1, 'pay_time' => time(), 'transaction_id' => $transaction_id));
        //-------------------支付成功后才   减余额   和清空购物车----------------------------------------------------------
        // 3  扣除余额
        $save_moneys = $order2['user_money']-$order['user_money'];
        // dump($save_moneys);die;
        M('users')->where(['user_id'=>$order['user_id']])->save(['user_money'=>$save_moneys]); // 用户的余额减
        // 4 清空购物车                                                              不是企业采购
        // "user_id = $order['user_id'] and selected = 1 and prom_type != 4"
        M('cart')->where(['user_id'=>$order['user_id'],'selected'=>1])->delete();

        // 减少对应商品的库存
        minus_stock($order);
        // 给他升级, 根据order表查看消费记录 给他会员等级升级 修改他的折扣 和 总金额
        update_user_level($order['user_id']);
        // 记录订单操作日志
        logOrder($order['order_id'], '订单付款成功', '付款成功', $order['user_id'], 2);
        //分销设置
        M('rebate_log')->where("order_id", $order['order_id'])->save(array('status' => 1));
        // 成为分销商条件
        //$distribut_condition = tpCache('distribut.condition');
        //if($distribut_condition == 1)  // 购买商品付款才可以成为分销商
        //M('users')->where("user_id = {$order['user_id']}")->save(array('is_distribut'=>1));
        // 给商家待结款字段加上
        $order_settlement = order_settlement($order['order_id']);
        M('store')->where("store_id", $order['store_id'])->setInc('pending_money', $order_settlement[0]['store_settlement']); // 店铺 待结算资金 累加
        //虚拟服务类商品支付
        if ($order['order_prom_type'] == 5) {
            make_virtual_code($order);
        }
        // 赠送积分
        order_give($order); // 调用送礼物方法, 给下单这个人赠送相应的礼物
        //用户支付, 发送短信给商家
        $res = checkEnableSendSms("4");
        if (!$res || $res['status'] != 1)
            return;        $store = M('store')->where("store_id", $order['store_id'])->find();
        if (empty($store['service_phone']))
            return;
        $sender = $store['service_phone'];
        $params = array('order_sn' => $order_sn);
        sendSms("4", $sender, $params);
	}