微信服务商,子商户微信h5支付,只能在微信浏览器外打开支付【不是微信公众号支付】

1、 PHP 代码 接收订单信息

$appid = '';//服务商的公众号APPID
$mch_id = '';//服务商的商户号
$sub_mch_id = '';//子商户的商户号
$key = '';//服务商的KEY
$data = array(
   'subject' => $body,//商品描述
   'total_amount' => $earnest_money,//支付金额
   'additional' => '',//附加数据 可以留空
   'order_id' => $order,//订单号
   'spbill_create_ip' => $_SERVER['REMOTE_ADDR']//终端ip
);
$subject = $data['subject']; //商品描述
$total_amount = $data['total_amount']*100; //金额
//$total_amount = 1; //金额
$additional = $data['additional']; ////附加数据
$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://你的域名.com.cn/wxpay/h5notify.php'; //回调地址 微信商户平台有个链接地址要填
$scene_info ='{"h5_info":{"type":"Wap","wap_url":"http://你的域名.com.cn","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&sub_mch_id=$sub_mch_id&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>
              <sub_mch_id>$sub_mch_id</sub_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 = http_post($url,$post_data); //后台POST微信传参地址  同时取得微信返回的参数,http_post方法请看下文
$objectxml = (array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA); //将微信返回的XML 转换成数组
//发送信息函数
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;
}
2、准备好上面的代码 开始支付
HTML 代码 
<a class="gopay" href="<?php echo $objectxml['mweb_url']?>">确认支付</a>

接收支付结果通知 PHP 页面
$xml =file_get_contents("php://input");//接收信息
file_put_contents('h5payres.txt',$xml);//查看接收信息
$payres = xmlToArray($xml);//xml 转数组
if($payres['result_code'] == 'SUCCESS'){
   echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
   //这里做修改订单状态代码 
   return true;
}
//xml转换成数组
function xmlToArray($xml){
   //禁止引用外部xml实体
   libxml_disable_entity_loader(true);
   $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
   $val = json_decode(json_encode($xmlstring),true);
   return $val;
}


今日吐槽

让烦恼与风去远行;让痛苦陪云去流浪。哼一曲好歌,也许心情,就会轻松许多

Contact ME

TAG Link