php服务端APP微信支付回调验证签名改变订单支付状态

<?php

       //处理微信支付回调
    	
    	$time = time();

        $testxml  = file_get_contents("php://input");  //接收微信发送的支付成功信息

        //file_put_contents('D:\webroot\xianyijie\JK\weixin.txt',$testxml);

       	$result = XMLDataParse($testxml);

       	file_put_contents("D:\webroot\xianyijie\JK\weixin.txt", json_encode($result)."\r\n", FILE_APPEND); //将信息写入txt文件做支付备份

        $sign_return = $result['sign'];

    		//如果成功返回了
    		
            if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){

            		$key = "商户密钥key";

            		unset($result['sign']);

            		$sign = appgetSign($result,$key);

				

				   if($sign == $sign_return)    //验证签名
				   {
 					  
 					  //这里是验签成功后的sql操作
                    
				   
                        //如果操作成功
						return "<xml><return_code><![CDATA[SUCCESS]]></return_code>
				                      <return_msg><![CDATA[OK]]></return_msg>
				                 </xml>";
                
						//如果操作失败
                        return "fail";	

				   }
				
            }


/*
 * 格式化参数格式化成url参数  生成签名sign
*/
 function appgetSign($Obj,$appwxpay_key)

  {

    foreach ($Obj as $k => $v)

    {

      $Parameters[$k] = $v;

    }

    //签名步骤一:按字典序排序参数

    ksort($Parameters);

    $String = formatBizQueryParaMap($Parameters, false);

    //echo '【string1】'.$String.'</br>';

    //签名步骤二:在string后加入KEY
        if($appwxpay_key){
            $String = $String."&key=".$appwxpay_key;
        }
        
    //echo "【string2】".$String."</br>";

    //签名步骤三:MD5加密

    $String = md5($String);

    //echo "【string3】 ".$String."</br>";

    //签名步骤四:所有字符转为大写

    $result_ = strtoupper($String);

    //echo "【result】 ".$result_."</br>";

    return $result_;

  }



//xml格式数据解析函数
 function XMLDataParse($data){
  $xml = simplexml_load_string($data,NULL,LIBXML_NOCDATA);
  $array=json_decode(json_encode($xml),true);
  return $array;
 }


?>

版权声明:本文为司江龙原创文章,未经允许不得转载。https://mp.csdn.net/postedit/81409478

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信支付的客户端和服务端代码可以分别使用不同的编程语言实现,但推荐使用官方提供的 SDK 实现。以下是基于官方 SDK 的客户端和服务端代码示例: 客户端代码: ```java IWXAPI api = WXAPIFactory.createWXAPI(this, "wxAPPID"); // 替换为你自己的 APPID PayReq request = new PayReq(); request.appId = "wxAPPID"; // 替换为你自己的 APPID request.partnerId = "商户号"; request.prepayId= "预支付订单号"; request.packageValue = "Sign=WXPay"; request.nonceStr= "随机字符串"; request.timeStamp= "时间戳"; request.sign= "签名"; api.sendReq(request); ``` 服务端代码: ```php require_once "lib/WxPay.Api.php"; require_once "WxPay.NativePay.php"; require_once 'log.php'; $input = new WxPayUnifiedOrder(); $input->SetBody("test"); // 商品描述 $input->SetAttach("test"); // 附加数据 $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis")); // 商户订单号 $input->SetTotal_fee("1"); // 总金额,单位为分 $input->SetTime_start(date("YmdHis")); // 订单生成时间 $input->SetTime_expire(date("YmdHis", time() + 600)); // 订单失效时间 $input->SetGoods_tag("test"); // 商品标记 $input->SetNotify_url("http://www.example.com/wxpay_notify.php"); // 接收微信支付异步通知回调地址 $input->SetTrade_type("NATIVE"); // 交易类型,取值如下:JSAPI,NATIVE,APP,WAP $input->SetProduct_id("test"); // 商品ID $notify = new NativePay(); $result = $notify->GetPayUrl($input); $url = $result["code_url"]; // 二维码链接 // 生成订单后,可以将订单信息存入数据库 ``` 以上代码仅供参考,具体实现还需要结合实际情况进行调整。另外,微信支付的开发过程中,还需要进行签名校验、异步通知处理等相关操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值