官方文档
https://pay.weixin.qq.com/wiki/doc/api/index.html
//请求微信的预支付 // 微信 id $appid= ''; // 商家的key $key = ''; $mch_id= '';// 商户号 mch_id 是 String(32) 1230000109 微信支付分配的商户号 $device_info= ''; $body=''; // 随机码 $nonce_str=rand(100000,999999); $out_trade_no="订单编号"; // 标价金额 $total_fee='80.00'; // 终端IP $spbill_create_ip="127.0.0.1"; // 路由地址 前面要加项目地址 $notify_url = "api/order/wxhd"; // 交易类型 $trade_type = 'JSAPI'; $stringA="appid=".$appid."&body=".$body."&device_info=".$device_info."&mch_id=".$mch_id."&nonce_str=".$nonce_str; // MD5加密 $strSignTmp=$stringA."".$key; //注:key为商户平台设置的密钥key $sign=strtoupper(MD5($strSignTmp));//注:MD5签名方式 $post_data = "<xml> <appid>".$appid."</appid> <body>".$body."</body> <mch_id>".$mch_id."</mch_id> <nonce_str>".$nonce_str."</nonce_str> <notify_url>".$notify_url."</notify_url> <out_trade_no>".$out_trade_no."</out_trade_no> <spbill_create_ip>".$spbill_create_ip."</spbill_create_ip> <total_fee>".$total_fee."</total_fee> <trade_type>".$trade_type."</trade_type> <sign>".$sign."</sign> </xml>";//拼接成XML 格式 // <scene_info>$scene_info</scene_info> // 微信地址 $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'; $dataxml=$this->posturl($url,$post_data); $reruxml = (array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA); if($reruxml['return_code']=='SUCCESS'&&$reruxml['result_code']=='SUCCESS' ){ //下面是前台需要的数据----- $data["time"]=time(); $data["nonceStr"]=$nonce_str; $data["package"]=$reruxml['prepay_id']; $data["signType"]='MD5'; $data["paySign"]=$sign; return json(["data"=>$data]); }else{ $json['info'] ='参数错误'; $json['msg'] ='0'; }
上面是主要的发送代码 里面用到了一个方法curl 会话 就是普通的post会话
// post请求的数据 function posturl($url,$data){ $data = json_encode($data); $headerArray =array("Content-type:application/json;charset='utf-8'","Accept:application/json"); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return json_decode($output,true); }
当代码请求成功后 会进入到我们的回调方法里面
//回调信息 public function wxhd(){ //允许从外部加载XML实体(防止XML注入攻击) libxml_disable_entity_loader(true); // 用于接收所有的数据 $data=file_get_contents("php://input"); $postObj = (array)simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA); //此处 用于变更订单的支付状态 或者其他操作 // 下面更新成功的变量(更新数据表) 最后一个 更新字段后 //此处用于返回给微信支付通知,我们也做出相应的修改 if(){ echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>'; } }