微信H5支付,从第三方手机浏览器中直接打开支付页面

首先在商户平台通开H5支付功能,然后帮后绑定,支付完成之后需要跳转的地址,开通之后就可以开发H5支付;

首先是签名,卧槽,说到这个就想骂人,

官方文档的解说;文科生哪能看得懂什么是集合;

下面就来签名:

<?php

//生成随机字符串
function getNonceNum($numLen=16){
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str = "";
    for ($i = 0; $i < $numLen; $i++) {
      $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
}

//获取用户ip地址
function get_client_ip(){
    $cip = "unknown";
    if($_SERVER[‘REMOTE_ADDR‘]){
        $cip = $_SERVER[‘REMOTE_ADDR‘];
    }elseif(getenv("REMOTE_ADDR")){
        $cip = getenv("REMOTE_ADDR");
    }
    return $cip;
}

$getNonceNumstring = getNonceNum();
$out_trade_no =  date("Ymd").getNonceNum();
$ip = get_client_ip();

$param[‘appid‘]                = "############";
$param[‘mch_id‘]            = ""############";";
$param[‘nonce_str‘]         = $getNonceNumstring;
$param[‘body‘]                 = "###";
$param[‘out_trade_no‘]         = $out_trade_no;
$param[‘total_fee‘]         = 1;
$param[‘spbill_create_ip‘]     = $ip;
$param[‘notify_url‘]         = "http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php";
$param[‘trade_type‘]         = "MWEB";
$param[‘scene_info‘]         = ‘{"h5_info": "h5_info" {"type": "IOS","app_name": "h5支付测试","bundle_id": ""}}‘;

//字典排序
ksort($param);

$sign_raw = "";
foreach($param as $k => $v){
    $sign_raw .= $k."=".$v."&";
}
$sign_raw .= "key=############";

//生成签名
$sign = strtoupper(md5($sign_raw));

将上面的###替换成你们的参数;太敏感就不贴出来了

然后就是发送xml数据请求接口;

$xml = <<<EOF
<xml>
<appid>###</appid>
<body>###</body>
<mch_id>###</mch_id>
<nonce_str>$getNonceNumstring</nonce_str>
<notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>
<out_trade_no>$out_trade_no</out_trade_no>
<spbill_create_ip>$ip</spbill_create_ip>
<total_fee>1</total_fee>
<trade_type>MWEB</trade_type>
<scene_info>{"h5_info": "h5_info" {"type": "IOS","app_name": "h5支付测试","bundle_id": ""}}</scene_info>
<sign>$sign</sign>
</xml>
EOF;

$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";

//调用接口,返回xml数据包含跳转url;
$result = postXmlCurl($xml, $url);

//解析xml
$xml = simplexml_load_string($result);
$bigarr = array();

//循环生成数组
foreach($xml->children() as $child){
    $key =  $child->getName();
    $bigarr["$key"] = "$child";//必须加引号
}
$tiaozhuanurl = $bigarr[‘mweb_url‘]."&redirect_url=####";

?>

<a href="<?php echo $tiaozhuanurl;?>">
<h1>h5支付</h1>
</a>

<?php

function postXmlCurl($xml, $url, $useCert = false, $second = 30){
    $ch = curl_init();
    //设置超时
    curl_setopt($ch, CURLOPT_TIMEOUT, $second);

    curl_setopt($ch,CURLOPT_URL, $url);
    if(stripos($url,"https://")!==FALSE){
        curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    }else{
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
    }
    //设置header
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    //要求结果为字符串且输出到屏幕上
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

    if($useCert == true){
        //设置证书
        //使用证书:cert 与 key 分别属于两个.pem文件
        curl_setopt($ch,CURLOPT_SSLCERTTYPE,‘PEM‘);
        curl_setopt($ch,CURLOPT_SSLCERT, "###.pem");
        curl_setopt($ch,CURLOPT_SSLKEYTYPE,‘PEM‘);
        curl_setopt($ch,CURLOPT_SSLKEY, "###.pem");

        curl_setopt($ch, CURLOPT_CAINFO, "###.pem‘);
    }
    //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 "error";
    }
}

其中要注意的就是xml解析;这个不需要证书;

时间: 2024-08-29 19:36:57

微信H5支付,从第三方手机浏览器中直接打开支付页面的相关文章

微信浏览器中调用支付宝支付

众所周知,在微信浏览器中是无法唤起支付宝的,会提示请在浏览器中打开,如果非要在微信浏览器中调起支付宝的话,只能是跳出微信浏览器,关于这一点,在支付宝官网给出了一个例子.但是,话说回去,后来我仔细想想,其实真的没有必要非要在微信浏览器中调起支付宝支付(当时真是一根筋啊啊啊...) 支付宝手机网站支付的官方文档: https://doc.open.alipay.com/docs/doc.htm?treeId=203&articleId=105288&docType=1 快速接入: https:

【微信ticket跳转】手机浏览器网页跳转到微信内置浏览器打开

[微信ticket跳转]手机浏览器网页跳转到微信内置浏览器打开 起始不少人已经关注到了招行的智能客服:http://xyk.cmbchina.com/Latte/wx/20150520wkf?from=ISTA004&clientid= 招行的这个跳转,发现后台返回的这个数据{"returnCode":"0000","returnMessage":"success","url":"weix

深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1

背景 “从浏览器中输入URL到页面加载的发生了什么“,这是一道经典的面试题,涉及到的知识面非常多,但作为一个自认为对网络知识掌握的比较好的老码农来说,回答这个问题自然不在话下.如果这道题目如果在面试出现,对我来说就是送分题啊.尽管如此,我还是愿意花一些时间根据我自己的理解回答一下这个题目,看我自己到底掌握的有多深,同时也把自己的知识梳理一下. 这让我想起另外一件往事,这道题有点类似于“在手机上浏览器上输入一个URL,手机做了一些什么”,我当时学习通信里的核心网时就给自己提出过这个问题. 我非常愿

Mindjump-微信跳转浏览器功能源码,实现微信内自动跳转手机浏览器访问网页url

源码使用场景:1.用来实现微信自动跳转外部浏览器下载app2.用来实现微信内打开网页链接自动跳转浏览器访问指定页面3.防止网页链接由于被微信拦截,导致用户无法正常在微信内打开 源码说明: 适用安卓和苹果系统,支持任何网页链接.并且无论链接是否已经被微信拦截,均可实现微信内自动跳转浏览器打开. 生成的跳转链接具有极佳的防拦截效果. 源码体验: 1.复制分享链接(app下载页链接或网页链接),然后在浏览器(电脑和手机上都可以)中打开我们需要用到的 Mindjump 平台:http://www.min

eclipse中tomcat能正常启动,在浏览器中不能打开问题

问题原因:没有在eclipse中tomcat的server location设置到tomcat的安装目录. 解决办法:1.选择server点击右键,选择Open选项,然后在server location栏设置tomcat的安装目录. 2.重新启动tomcat server. 3.在浏览器中输入:http://localhost:port    注:port代表你设置的端口号   如果需要改端口请在server.xml中操作.

微信自动跳转到手机浏览器

最近公司开发了一款app,在做推广的时候遇到了微信扫码无法直接下载的问题 最终在参考了众多资料后,发现微信内置浏览器不支持直接下载功能,可能这就是公司足够大了,有些功能不给开放也不会怎样.但是问题还是要解决的. 解决办法: 一.上传微信开放平台 方法已经弃用不现实,你们懂得 二. 做一个网页,指向另一个网页进行下载.这个方法也是比较常见的一个方法.做一个页面然后跳转浏览器打开我们要下载的apk: 月牙跳转是一款基于微信后端开发了一款微信营销下载推广助手,使用了本插件生成的链接,用户在微信任意环境

微信h5网页标签跳转到手机默认浏览器的实现方式

很多朋友的推广链接需要在微信中进行的网页宣传.传播.等等,但是各位朋友一定发现了微信中是屏蔽掉了APP的下载链接的. 但是微信最为一个最大的社交平台,为了自身的利益,屏蔽掉了很多链接.我们要怎么解决这个问题呢? 基于微信接口开发了一款全新的手机端微信中的推广,通过这个程序生成的链接,安卓用户在微信中点击的话,是可以直接跳转手机默认浏览器打开链接. IOS用户在微信中点击的话会弹出一个遮罩提示用户用浏览器打开链接.这样的话大大的减少了用户的操作步骤,对我们的推广转化率会有显著的提升. 测试地址:h

去除android手机浏览器中, 按住链接出现border的情况

body{ -moz-user-select:none; -webkit-user-select:none; -webkit-tap-highlight-color:transparent; }

解决手机浏览器上input 输入框导致页面放大的问题(记录)

在微信手机页面开发当中,页面是没有问题的,但是当焦点在input输入框的时候,手机页面会自动放大. 加入以下代码在head 区,可解决此问题 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />