微信H5支付功能小结

微信H5支付整理

官方 流程图 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_3

官方案例 http://wxpay.wxutil.com/mch/pay/h5.v2.php

首先要申请开通微信H5支付

开通中可能会遇到的问题:

(1)网站域名ICP备案主体与商户号主体不一致。

解决版本:申请域名的授权即可。

开通成功后H5支付流程:

调用统一下单接口:https://api.mch.weixin.qq.com/pay/unifiedorder

1、用户在商户侧完成下单,使用微信支付进行支付

2、由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB

3、统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名“mweb_url”),商户通过mweb_url调起微信支付中间页

4、中间页进行H5权限的校验,安全性检查(此处常见错误请见下文)

5、如支付成功,商户后台会接收到微信侧的异步通知

6、用户在微信支付收银台完成支付或取消支付,返回商户页面(默认为返回支付发起页面)

7、商户在展示页面,引导用户主动发起支付结果的查询

8,商户后台判断是否接到收微信侧的支付结果通知,如没有,后台调用我们的订单查询接口确认订单状态

9、展示最终的订单支付结果给用户

代码实现:

       $body= $data['body']; //商品描述        
     $total_amount = $data['total_amount']*100; //金额 $order_id = $data['order_id']; ////订单号 $nonce_str=MD5($order_id);//随机字符串 $spbill_create_ip = $data['spbill_create_ip']; //终端ip $trade_type = 'MWEB';//交易类型 具体看API 里面有详细介绍 $notify_url = 'http://xy.xxx.com/callback'; //回调地址 $scene_info ='{"h5_info":{"type":"Wap","wap_url":"http://xy.xxx.com","wap_name":"测试支付"}}'; //场景信息 //对参数按照key=value的格式,并按照参数名ASCII字典序排序生成字符串 $signA = "appid=$appid&body=$body&mch_id=$mch_id&nonce_str=$nonce_str&notify_url=$notify_url&out_trade_no=$order_id
      &scene_info=$scene_info&spbill_create_ip=$spbill_create_ip&total_fee=$total_amount&trade_type=$trade_type"; $strSignTmp = $signA."&key=$key"; //拼接字符串 $sign = strtoupper(MD5($strSignTmp)); // MD5 后转换成大写 $post_data = "<xml> <appid>$appid</appid> <body>$subject</body> <mch_id>$mch_id</mch_id> <nonce_str>$nonce_str</nonce_str> <notify_url>$notify_url</notify_url> <out_trade_no>$order_id</out_trade_no> <scene_info>$scene_info</scene_info> <spbill_create_ip>$spbill_create_ip</spbill_create_ip> <total_fee>$total_amount</total_fee> <trade_type>$trade_type</trade_type> <sign>$sign</sign> </xml>";//拼接成XML 格式 $url = "https://api.mch.weixin.qq.com/pay/unifiedorder";//微信传参地址 $dataxml = $this->http_post($url,$post_data); //后台POST微信传参地址 同时取得微信返回的参数,http_post方法请看下文 $objectxml = (array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA); //将微信返回的XML 转换成数组 if($objectxml['return_code'] == 'SUCCESS') { if($objectxml['result_code'] == 'SUCCESS'){//如果这两个都为此状态则返回mweb_url,详情看‘统一下单’接口文档 return $objectxml['mweb_url']; //mweb_url是微信返回的支付连接要把这个连接分配到前台 } if($objectxml['result_code'] == 'FAIL'){
        return $err_code_des = $objectxml['err_code_des'];

      }}

成功的回调信息

<xml>
   <return_code><![CDATA[SUCCESS]]></return_code>
   <return_msg><![CDATA[OK]]></return_msg>
   <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
   <mch_id><![CDATA[10000100]]></mch_id>
   <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
   <openid><![CDATA[oUpF8uMuAJO_M2pxb1Q9zNjWeS6o]]></openid>
   <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
   <result_code><![CDATA[SUCCESS]]></result_code>
   <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
   <trade_type><![CDATA[JSAPI]]></trade_type>
</xml> 

支付过程中会遇到一些错误,大多为配置原因造成可参照官网中的错误信息进行配置调整:

错误信息对照地址:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值