参考来源:
https://www.php.cn/php-weizijiaocheng-407545.html
https://blog.csdn.net/rain_silently/article/details/79390377
https://blog.csdn.net/chenrui310/article/details/80830798
废话不多说,直接上代码:
public function demo() { // 获取微信回调的数据 $notifiedData = file_get_contents(\'php://input\'); //XML格式转换 $xmlObj = simplexml_load_string($notifiedData, \'SimpleXMLElement\', LIBXML_NOCDATA); $xmlObj = json_decode(json_encode($xmlObj),true); $key = "公众号的key"; //请求回来的数据格式 // $xmlObj = [ // \'appid\' => \'wxf546a8df41c2ce18\', // \'attach\' => \'商品\', // \'bank_type\' => \'CFT\', // \'cash_fee\' => \'1\', // \'fee_type\' => \'CNY\', // \'is_subscribe\' => \'Y\', // \'mch_id\' => \'1534940151\', // \'nonce_str\' => \'jld6md2ky75emve7spsrf2tolturngrm\', // \'openid\' => \'oyljP5y2HbOHsEAuOLpHP2dXQChw\', // \'out_trade_no\' => \'20190808164259728748651734197807\', // \'result_code\' => \'SUCCESS\', // \'return_code\' => \'SUCCESS\', // \'sign\' => \'A68DC8C8E61DCA90D4454963982A7B12\', // \'time_end\' => \'20190808164308\', // \'total_fee\' => \'1\', // \'trade_type\' => \'JSAPI\', // \'transaction_id\' => \'4200000342201908088760422065\', // ]; //是否成功支付 if ($xmlObj[\'return_code\'] == "SUCCESS" && $xmlObj[\'result_code\'] == "SUCCESS") { //把签名去掉 $xmlSign = $xmlObj[\'sign\']; unset($xmlObj[\'sign\']); $sign = $this -> appgetSign($xmlObj,$key); if ($sign === $xmlSign) { //验证通过,确认已经支付
//告诉微信不用重复通知
return "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
} } } /* * 格式化参数格式化成url参数 生成签名sign */ private function appgetSign($Obj,$appwxpay_key) { foreach ($Obj as $k => $v) { $Parameters[$k] = $v; } //签名步骤一:按字典序排序参数 ksort($Parameters); $String = $this -> ToUrlParams($Parameters); //签名步骤二:在string后加入KEY if($appwxpay_key){ $String = $String."&key=".$appwxpay_key; } //签名步骤三:MD5加密 $String = md5($String); //签名步骤四:所有字符转为大写 $result_ = strtoupper($String); return $result_; } private function ToUrlParams($Parameters) { $buff = ""; foreach ($Parameters as $k => $v) { if($k != "sign" && $v != "" && !is_array($v)){ $buff .= $k . "=" . $v . "&"; } } $buff = trim($buff, "&"); return $buff; }