微信h5支付,分享给有需要的朋友

  大概思路:前台传过来参数后台接收比如金额(注意这里的金额,微信传的是分),订单号,客户端ip(获取客户端ip方法,官方给的方法不对,请查看我的另一篇)等。

  用到的最重要的接口是 统一下单

  复制代码

  $subject=$data['subject']; //商品描述

  $total_amount=$data['total_amount']*100; //金额

  $additional=$data['additional']; ////附加数据

  $order_id=$data['order_id']; ////订单号

  $nonce_str=MD5($order_id);//随机字符串

  $spbill_create_ip=$data['spbill_create_ip']; //终端ip

  //以上参数接收不必纠结,按照正常接收就行,相信大家都看得懂

  //$spbill_create_ip='118.144.37.98'; //终端ip测试

  $trade_type='MWEB';//交易类型 具体看API 里面有详细介绍

  $notify_url='

  /medias/public/index.php/home/Wxh5pay/notify_url'; //回调地址

  $scene_info='{"h5_info":{"type":"Wap","wap_url":"123","wap_name":"测试支付"}}'; //场景信息

  //对参数按照key=value的格式,并按照参数名ASCII字典序排序生成字符串

  $signA="appid=$appid&body=$subject&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="

  $appid

  $subject

  <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

  $sign

  ";//拼接成XML 格式

  $url="

  api.mch.weixin.qq/pay/unifiedorder";//微信传参地址

  $dataxml=$this->http_post($url,$post_data); //后台POST微信传参地址 同时取得微信返回的参数,http_post方法请看下文

  $objectxml=(array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA); //将微信返回的XML 转换成数组

  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'];

  }}

  复制代码

  大家可以使用工具,检测您的签名是不是正确。

  function http_post($url, $data) {

  $ch=curl_init();

  curl_setopt($ch, CURLOPT_URL,$url);

  curl_setopt($ch, CURLOPT_HEADER,0);

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  curl_setopt($ch, CURLOPT_POST, 1);

  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

  $res=curl_exec($ch);

  curl_close($ch);

  return $res;

  }

posted @ 2022-02-11 19:49  ebuybay  阅读(109)  评论(0编辑  收藏  举报