微信H5支付,看完这个你一定就懂了

更新日期: 2019-08-05阅读: 3.1k标签: 支付

一、说在前面的话

1.微信H5支付一定要开通,没开通就别扯淡了,它和APP支付不是一个

2.微信支付后台一定要配置js安全域,否则支付时可能会因为地址不在该域下导致支付失败(提示商户参数配置错误,其实跟参数没半毛关系)

3.微信的价格1是1分,所以价格total_fee参数没有零点几几的情况。(支付宝0.01是一分)

4.微信请和返回都是XML格式,注意转化,可以写个公共方法

5.你可以设置支付成功后的回调页面,但是:要对整个回调redirect_url进行urlencode处理

别特么只知道处理域名,不管参数


二、直接上代码(按照步骤加解读,自己抽离相关方法)

1.整理所有H5支付的参数,数组格式

$scene = ['h5_info' => ['type' => 'h5_info', 'app_name' => 'H5支付', 'package_name' => 'baoming']];//这个参数一定要加
$scene = json_encode($scene);
$param = [ 
    'appid'=>$config['appid'],//产品ID
    'mch_id'=>$config['mch_id'],//商户ID
    'nonce_str'=> $nonce_str,//16位随机数
    'body'=>'点购买',
    'out_trade_no' => $oid,//订单ID
    'total_fee'=> $price,//价格
    'spbill_create_ip'=>\S\Util\Ip::getClientIp(),//真实ID
    'notify_url'=>$notify_url,//微信通知你支付结果的接口
    'trade_type'=> 'MWEB',//一定是这个值
    'scene_info'=> $scene,//信息,其实这个参数是必须的
];  
ksort($param);
$str = ''; 
foreach ($param as $key=>$value){
     $str .= $key.'='.$value.'&';
}   
$sign_str = $str.'key='.$config['key'];
$sign = strtoupper(md5($sign_str));
$param['sign'] = $sign;//生成规定的sign校验值
$post_data = $this->arrayToXml($param);//生成微信要求的XML格式
return $this->doPay($post_data);//返回结果

2.将所有的参数格式整理为XML格式(对应上文中的函数

    public 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;
    }

3.请求支付,并返回结果(XML结果,需要处理下格式,我的函数中已经处理)

    public function doPay($data) {      
        $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
        $ch = curl_init();     
        curl_setopt($ch, CURLOPT_TIMEOUT, 30000);
        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, $data);
        $res = curl_exec($ch); 
        curl_close($ch);  
        //处理XML
        libxml_disable_entity_loader(true);
        $data = json_decode(json_encode(simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        \S\Log\Logger::getInstance()->info(array(json_encode($data),'微信生成prepayid'));
        return $data['return_code'] == 'SUCCESS' ? $data['mweb_url'] : '';//返回的时,H5中调起微信支付的链接地址
    }

 


链接: https://fly63.com/article/detial/5146

如何在h5中调用支付宝支付功能

如何在自己的H5页面如何集成支付宝支付呢?目前采用前后端分离的开发模式,数据都是通过服务器那边获取的,现在需要集成支付宝支付,下面就简单介绍下。

支付系统订单模型该如何设计?

支付系统太重要了,它拥有公司所有的现金流水,是进行业务清算、财务核算、上市审计以及后续各类财务信息管理的关键系统之一。一家公司被收购后新老板们最关心的事也莫过于财务数据的准确性了

支付宝小程序个人开发者,但暂未开放支付接口

支付宝小程序今日正式面向个人开发者开放公测。这是继微信之后,业内第2家面向个人开发者开放的小程序平台。有开发能力的个人用户可访问支付宝小程序平台,扫码验证个人身份以后即可开始支付宝小程序账号申请并进行代码开发。

微信支付:任何将微信支付用于虚拟货币交易的行为将予以清退

腾讯科技讯 10月10日,微信支付发布了对虚拟货币的态度声明。微信支付称,微信支付不支持虚拟货币交易,如发现任何把微信支付用于虚拟货币交易的行为,将予以清退处理。

无感支付:阿里腾讯的下个“凡尔登”?

糟糕的用户体验会反作用于企业盈利能力的提升,而盈利能力的下降将导致服务效率的下降,从而陷入由用户体验到服务价值下降的恶性循环。而在以体验经济为导向的商业活动中

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!