参考来源:
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; }