微信H5支付开发全过程(除内置微信以外的浏览器)

前言:网上都是~ 呵呵 自己搞 只要花时间 多问客服总会有的

只说程序不说准备工作 自己ID 或者秘钥都准备好了  写的有点儿乱 可以把所有的方法 放在一个文件中调用

 public function wechat ($doorder,$doczmoney,$doczbody) {
        // H5 微信支付
        $wxUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder"; //下单接口
        $appid = ""; //公众账号ID
        $mch_id ="";// 商户号
        $nonce_str =$this->randStrpay(); //随机字符串
        $key ="";
        $body = $doczbody; //商品描述
        $out_trade_no = $doorder;// 商户订单号
        $total_fee = $doczmoney*100;// 我数据库存的是元 转换下 标价金额 f分
        $device_info = ‘‘;        

        $spbill_create_ip = $this->getClientp();// 终端IP
        $notify_url ="";// 通知地址
        $trade_type ="MWEB";// 交易类型
        //组合数组 方便字典升序
        $paraMap = array(‘appid‘=>$appid,
            ‘mch_id‘=>$mch_id,
            ‘nonce_str‘=>$nonce_str,
            ‘body‘=>$body,
            ‘out_trade_no‘=>$out_trade_no,
            ‘total_fee‘=>$total_fee,
            ‘spbill_create_ip‘=>$spbill_create_ip,
            ‘notify_url‘=>$notify_url,
            ‘trade_type‘=>$trade_type,
            ‘device_info‘=>$device_info
        );
        // 字典升序 下边有方法 这是摘出来的 自己复制到自己的位置 然后调用 下边几个调用都一样
        $singStr = \Ruifi\Service\CommonService::formatParaMap($paraMap);

            //获取singvalue值
        $sign =$this->autostr($singStr,$key);
        // sign 值添加到数组
        $mapSing = array_merge($paraMap,array(‘sign‘=>$sign));
        //print_r($mapSing);die;
        //数组转xml
        $arrXml = \Ruifi\Service\CommonService::arrayToXml($mapSing);
        //post 发送
        $wechatreslut = \Ruifi\Service\CommonService::postXmlCurl($arrXml,$wxUrl);
        //接受xml
        $xmlToarr = \Ruifi\Service\CommonService::xmlToArray($wechatreslut);
        $xmlToarrStr = \Ruifi\Service\CommonService::utf8_to_gbk_arr($xmlToarr);
        if ($xmlToarrStr[‘result_code‘] ==‘SUCCESS‘){
            $wxMurl = $xmlToarrStr[‘mweb_url‘];
            header("Location: $wxMurl");

        }
    }
    //32位随机字符串
    function randStrpay($length=32) {
        $rand=‘‘;
        $randstr= ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789‘;
        $max = strlen($randstr)-1;
        mt_srand((double)microtime()*1000000);
        for($i=0;$i<$length;$i++) {
            $rand.=$randstr[mt_rand(0,$max)];
        }
        return $rand;
    }
    // 签名算法
    function autostr($singStr,$key){
        $stringSignTemp = $singStr."&key=$key";
        $sign = md5($stringSignTemp);
        $signValue = strtoupper($sign);
        return $signValue;
}
//获取IP
    function getClientp(){
        $cip ="unknow";
        if($_SERVER[‘REMOTE_ADDR‘]){
            $cip = $_SERVER[‘REMOTE_ADDR‘];
        }elseif(getenv("REMOTE_ADDR")){
            $cip =getenv("REMOTE_ADDR");
        }
        return $cip;
    }
这些方法是 上边调用的 你自己随意
 /*  字典升序*/
    function formatParaMap($paraMap)
    {
        $buff = "";
        ksort($paraMap);
        foreach ($paraMap as $k => $v)
        {
            $buff .= $k . "=" . $v . "&";
        }
        $reqPar = ‘‘;
        if (strlen($buff) > 0)
        {
            $reqPar = substr($buff, 0, strlen($buff)-1);
        }
        return $reqPar;
    }

/*  数组转xml */
    function arrayToXml($arr)
    {
        $xml = "<xml>";
        foreach ($arr as $key=>$val)
        {
            if (is_numeric($val))
            {
                $xml.="<".$key.">".$val."</".$key.">";
            }
            else{
                $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
            }
        }
        $xml.="</xml>";
        return $xml;
    }
public function postXmlCurl($xml,$url,$second=30)
    {
        //初始化curl
        $ch = curl_init();
        curl_setopt($ch, CURLOP_TIMEOUT, $second);
        curl_setopt($ch,CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
        //运行curl
        $data = curl_exec($ch);
        curl_close($ch);
        //返回结果
        if($data)
        {
            curl_close($ch);
            return $data;
        }
        else
        {
            $error = curl_errno($ch);
            echo "curl出错,错误码:$error"."<br>";
            curl_close($ch);
            return false;
        }
    }
 /*  xml 转数组 */
    public function xmlToArray($xml)
    {
        //将XML转为array
        $array_data = json_decode(json_encode(simplexml_load_string($xml, ‘SimpleXMLElement‘, LIBXML_NOCDATA)), true);
        return $array_data;
    }
时间: 2025-01-02 09:26:41

微信H5支付开发全过程(除内置微信以外的浏览器)的相关文章

微信H5支付开发流程(前端)

功能描述 公司最近有个项目要做基于微信的H5校服定制wepApp的开发,用户选择完商品后结算,整个流程结束.此文主要针对订单和结算流程介绍.在整个支付流程过程中,前端只做了很少一部分的工作(传递参数给后台使之生成订单,拿到订单相关参数调用WeixinJSBridge.invoke方法唤起微信支付界面,),大部分操作涉及安全问题均在后台实现. 准备工作 (1)设置支付目录 在"商户平台-产品中心-开发配置"设置公众号支付目录.这个一般要提前申请,需要审核资质,需要营业执照等等. 微信生态

Android通过外部浏览器调用微信H5支付,Android+PHP详解

看了好多关于讲解微信H5支付开发的文章,大多数都是通过微信内部浏览器来调用支付接口(其实就是公众号支付),可能是因为H5支付接口刚开放不久吧. 微信官方体验链接:http://wxpay.wxutil.com/mch/pay/h5.v2.php,请在微信外浏览器打开. 看了上面的体验链接,如果感兴趣,可以接着往下看,希望对你有所帮助. 一.Android端 Android端代码相对来说比较简单一些,我这边直接调用系统浏览器打开H5支付页面 Intent intent = new Intent()

微信h5支付demo微信H5支付demo非微信浏览器支付demo微信wap支付

一.首先先确定H5支付权限已经申请!(需要微信h5支付demo的可以加 851 488 243 备注:h5支付) 二.开发流程 1.用户在商户侧完成下单,使用微信支付进行支付 2.由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB 3.统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名"mweb_url"),商户通过mweb_url调起微信支付中间页 4.中间页进行H5权限的校验,安全性检查(此处常见错误请见下文) 5.如支付成

C#开发微信门户及应用(44)--微信H5页面开发的经验总结

在我们开发微信页面的时候,需要大量用到了各种呈现的效果,一般可以使用Boostrap的效果来设计不同的页面,不过微信团队也提供很多这方面的资源,包括JSSDK的接口,以及Weui的页面样式和相关功能页面,给我们提供了很大的便利,本文是在自己做的一些H5微信应用页面上做了一些功能总结,希望能够给大家提供一定的帮助. 1.微信网页开发 1) JSSDK 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包.通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语

微信支付—微信H5支付「非微信内部浏览器-QQ/UC浏览器等」

前言 微信支付-微信H5外部浏览器支付「本文」微信H5内部浏览器支付「待写」PC端扫码支付「待写」 一直计划着写一写微信支付相关的文章,希望能加深一下自己的印象,拖了一天又一天… 最近终于空出时间来填坑了,我将文章分为微信H5外部浏览器支付.微信H5内部浏览器支付.PC端扫码支付三篇来写. 本篇是微信H5外部浏览器支付:支付时会唤起微信APP进行支付. 扫盲补充:关于微信H5支付,分为内部浏览器支付 + 外部浏览器支付,两者还是稍微有点点区别的,内部浏览器即在微信内打开网页,进行支付,支付调用由

微信H5支付申请相关问题

之前的文章「微信支付申请相关问题」里说过微信公众号和 APP 申请微信支付,今天来说下微信 H5 支付的申请. 一.背景介绍 H5 支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付.主要用于触屏版的手机浏览器请求微信支付的场景.可以方便的从外部浏览器唤起微信支付. 微信官方体验链接:https://wxpay.wxutil.com/mch/pay/h5.v2.php,请在微信外浏览器打开. 可能很多人对 微信 H5 支付

php微信h5支付

近期开发用到了微信h5支付,大概分享一下代码和常见问题 注:支付调试需要在线上调试,本地调试微信回调是找不到的 1.预下单 public function getCode($info) { $url = "https://api.mch.weixin.qq.com/pay/unifiedorder";//微信传参地址 //1.获取调用统一下单接口所需必备参数 $appid = $this->appid;//微信公众号appid $mch_id = $this->mchid;

CDN 边缘微信h5斗牛开发规则,三秒部署、支持定制、即时生效,多种规则覆盖常用业务场景

CDN 边缘规则,三秒部署.支持定制.微信h5斗牛开发h5.super-mans.comQ:2012035031即时生效,多种规则覆盖常用业务场景 2017年的最后一周,又拍云进行了一次重要升级,将自定义 Rewrite 升级为"边缘规则".互联网应用场景的日益多样化,简单.方便.快速的根据不同应用场景实现不同的功能变得越来越重要.边缘规则,将更加贴合客户在垂直领域的需求,为终端用户带来更好的访问体验. 什么是边缘规则(EdgeRules)又拍云 CDN 边缘网络中的智能可扩展应用程序

微信H5支付demo

首先我们必须得在微信公众平台和微信商业平台那边配置好相关配置 1.注册微信服务号,开通微信支付权限绑定微信商业平台(这个具体怎么操作我就不说了) 2.获取应用(公众号)appid.应用(公众号)秘钥.商户号.商户API秘钥这四个配置信息 3.微信商业平台开通H5支付权限,配置支付域名(是要ICP备案的域名), 4.微信公众号配置白名单(也就是服务器ip) 5.开始写代码实现微信H5支付了(首先我们得理清H5支付跟其他类型支付的区别) 5.1.直接用微信客户段支付的那个是JSAPI支付模式 5.2