notify.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?
  2. include("../../../../config/conn.php");
  3. include("../../../../config/function.php");
  4. $wxpay=preg_split("/,/",$rowcontrol[wxpay]);
  5. function curl_post_https($url,$data){ // 模拟提交数据函数
  6. $curl = curl_init(); // 启动一个CURL会话
  7. curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
  8. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
  9. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
  10. curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
  11. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
  12. curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
  13. curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
  14. curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
  15. curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
  16. curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
  17. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
  18. $tmpInfo = curl_exec($curl); // 执行操作
  19. if (curl_errno($curl)) {
  20. echo 'Errno'.curl_error($curl);//捕抓异常
  21. }
  22. curl_close($curl); // 关闭CURL会话
  23. return $tmpInfo; // 返回数据,json格式
  24. }
  25. $xmlObj = simplexml_load_string(file_get_contents("php://input"));
  26. //$xmlObj = simplexml_load_string($GLOBALS['HTTP_RAW_POST_DATA']); //解析回调数据
  27. $appid = $xmlObj->appid;//微信appid
  28. $mch_id = $xmlObj->mch_id; //商户号
  29. $nonce_str = $xmlObj->nonce_str;//随机字符串
  30. $sign = $xmlObj->sign;//签名
  31. $result_code = $xmlObj->result_code;//业务结果
  32. $openid = $xmlObj->openid;//用户标识
  33. $is_subscribe = $xmlObj->is_subscribe;//是否关注公众帐号
  34. $trace_type = $xmlObj->trade_type;//交易类型,JSAPI,NATIVE,APP
  35. $bank_type = $xmlObj->bank_type;//付款银行,银行类型采用字符串类型的银行标识。
  36. $total_fee = $xmlObj->total_fee;//订单总金额,单位为分
  37. $fee_type = $xmlObj->fee_type;//货币类型,符合ISO4217的标准三位字母代码,默认为人民币:CNY。
  38. $transaction_id = $xmlObj->transaction_id;//微信支付订单号
  39. $out_trade_no = $xmlObj->out_trade_no;//商户订单号
  40. $attach = $xmlObj->attach;//商家数据包,原样返回
  41. $time_end = $xmlObj->time_end;//支付完成时间
  42. $cash_fee = $xmlObj->cash_fee;
  43. $return_code = $xmlObj->return_code;
  44. if(!empty($_SESSION["SHOPUSER"])){
  45. php_toheader("../../wxresult.php?a=pay");
  46. }
  47. if($return_code =="SUCCESS"){
  48. //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
  49. //进行签名验证B
  50. $signA ="appid=$appid&mch_id=$mch_id&nonce_str=$nonce_str&transaction_id=$transaction_id";
  51. $strSignTmp = $signA."&key=".$wxpay[2]; //拼接字符串 注意顺序微信有个测试网址 顺序按照他的来 直接点下面的校正测试 包括下面XML 是否正确
  52. $sign = strtoupper(MD5($strSignTmp)); // MD5 后转换成大写
  53. $post_data = "<xml>
  54. <appid>$appid</appid>
  55. <mch_id>$mch_id</mch_id>
  56. <nonce_str>$nonce_str</nonce_str>
  57. <transaction_id>$transaction_id</transaction_id>
  58. <sign>$sign</sign>
  59. </xml>";//拼接成XML 格式
  60. $url = "https://api.mch.weixin.qq.com/pay/orderquery";//微信传参地址
  61. $dataxml = curl_post_https($url,$post_data); //后台POST微信传参地址 同时取得微信返回的参数 POST 方法我写下面了
  62. $objectxml = (array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA); //将微信返回的XML 转换成数组
  63. //进行签名验证E
  64. if($objectxml["trade_state"]=="SUCCESS"){
  65. //自己逻辑代码B
  66. $sql="select * from yjcode_dingdang where ddbh='".$out_trade_no."' and ifok=0";mysql_query("SET NAMES 'gbk'");$res=mysql_query($sql);
  67. if($row=mysql_fetch_array($res)){
  68. if(1==$row[ifok]){echo "success";exit;}
  69. $sj=date("Y-m-d H:i:s");
  70. $uip=$_SERVER["REMOTE_ADDR"];
  71. updatetable("yjcode_dingdang","sj='".$sj."',uip='".$uip."',alipayzt='TRADE_SUCCESS',ddzt='交易成功',ifok=1 where id=".$row[id]);
  72. $money1=$row[money1];
  73. PointIntoM($row[userid],"微信充值".$money1."元",$money1,4,$transaction_id);
  74. PointUpdateM($row[userid],$money1);
  75. if(!empty($row[sxf])){
  76. $sxf=$row[sxf]*(-1);
  77. PointIntoM($row[userid],"支付接口手续费",$sxf,0,$transaction_id);
  78. PointUpdateM($row[userid],$sxf);
  79. }
  80. echo "success";exit;
  81. }
  82. //自己逻辑代码E
  83. }
  84. echo success;
  85. }
  86. ?>