手机端微信支付,调用微信app完成支付。

<?php
header("Content-Type: text/html;charset=utf-8");

if($_POST['wechatm_two'] = 'wechatm')
{
	$order['order_sn'] = $_POST['order_sn'];
	$order['order_amount'] = $_POST['order_amount'];
	$cart_goods[0]['goods_name'] = $_POST['goods_name'];
	$cart_goods[0]['goods_id'] = $_POST['goods_id'];
}

$appid  = "";                  //应用APPID
$mch_id = "";                  //微信支付商户号
$key    = "";                 //微信商户API密钥
$out_trade_no = $order['order_sn'];//平台内部订单号
$nonce_str = createNoncestr();//随机字符串
$body = iconv('gbk','utf-8',$cart_goods[0]['goods_name']);//内容
$total_fee = (int)($order['order_amount'] * 100); //金额  以分为单位的。
$spbill_create_ip = get_client_ip(); //IP
$notify_url = ""; // 异步通知回调地址
$trade_type = 'MWEB';//交易类型 具体看API 里面有详细介绍
$str = iconv('gbk','utf-8','至尊'); # 转码
$scene_info = '{"h5_info":{"type": "Wap","wap_url": "www.baidu.com","wap_name": '.$str.'}}';
$signA ="appid=$appid&attach=$out_trade_no&body=$body&mch_id=$mch_id&nonce_str=$nonce_str&notify_url=$notify_url&out_trade_no=$out_trade_no&scene_info=$scene_info&spbill_create_ip=$spbill_create_ip&total_fee=$total_fee&trade_type=$trade_type";
$strSignTmp = $signA."&key=$key"; //拼接字符串  注意顺序微信有个测试网址 顺序按照他的来 直接点下面的校正测试 包括下面XML  是否正确
$sign = strtoupper(MD5($strSignTmp)); // MD5 后转换成大写  签名方式
$post_data = "<xml>
    <appid>$appid</appid>
    <mch_id>$mch_id</mch_id>
    <body>$body</body>
    <out_trade_no>$out_trade_no</out_trade_no>
    <total_fee>$total_fee</total_fee>
    <spbill_create_ip>$spbill_create_ip</spbill_create_ip>
    <notify_url>$notify_url</notify_url>
    <trade_type>$trade_type</trade_type>
    <scene_info>$scene_info</scene_info>
    <attach>$out_trade_no</attach>
    <nonce_str>$nonce_str</nonce_str>
    <sign>$sign</sign>
</xml>";//拼接成XML 格式  微信使用的是xml格式

$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";//微信传参地址  统一下单地址
$dataxml = postXmlCurl($post_data,$url); //后台POST微信传参地址  同时取得微信返回的参数
$objectxml = (array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA);
	
// 同步跳转地址
$return_url = urlencode('/?act=order_detail&order_id='.$cart_goods[0]['goods_id']);

$obj_url =  $objectxml['mweb_url'].'&redirect_url='.$return_url;

# 跳转文件
echo "<script>location.href = '{$obj_url}'</script>";

// 随机申城字符串
function createNoncestr( $length = 32 ){
    $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
    $str ="";
    for ( $i = 0; $i < $length; $i++ )  {
        $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);
    }
    return $str;
}

// 发送请求
function postXmlCurl($xml,$url,$second = 30){
    $ch = curl_init();
    //设置超时
    curl_setopt($ch, CURLOPT_TIMEOUT, $second);
    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);
    //返回结果
    if($data){
        curl_close($ch);
        return $data;
    }else{
        $error = curl_errno($ch);
        curl_close($ch);
        echo "curl出错,错误码:$error"."<br>";
    }
}

// 获取为ip
function get_client_ip($type = 0) {
    $type       =  $type ? 1 : 0;
    $ip         =   'unknown';
    if ($ip !== 'unknown') return $ip[$type];
    if($_SERVER['HTTP_X_REAL_IP']){//nginx 代理模式下,获取客户端真实IP
        $ip=$_SERVER['HTTP_X_REAL_IP'];
    }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {//客户端的ip
        $ip     =   $_SERVER['HTTP_CLIENT_IP'];
    }elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {//浏览当前页面的用户计算机的网关
        $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $pos    =   array_search('unknown',$arr);
        if(false !== $pos) unset($arr[$pos]);
        $ip     =   trim($arr[0]);
    }elseif (isset($_SERVER['REMOTE_ADDR'])) {
        $ip     =   $_SERVER['REMOTE_ADDR'];//浏览当前页面的用户计算机的ip地址
    }else{
        $ip=$_SERVER['REMOTE_ADDR'];
    }
    // IP地址合法验证
    $long = sprintf("%u",ip2long($ip));
    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
    return $ip[$type];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值