{"id":31026,"date":"2024-11-25T12:04:27","date_gmt":"2024-11-25T04:04:27","guid":{"rendered":"https:\/\/fwq.ai\/blog\/31026\/"},"modified":"2024-11-25T12:04:27","modified_gmt":"2024-11-25T04:04:27","slug":"thinkphp%e6%95%b4%e5%90%88%e5%be%ae%e4%bf%a1%e6%94%af%e4%bb%98%e5%8a%9f%e8%83%bd%e8%af%a6%e8%a7%a3","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/31026\/","title":{"rendered":"Thinkphp\u6574\u5408\u5fae\u4fe1\u652f\u4ed8\u529f\u80fd\u8be6\u89e3"},"content":{"rendered":"<p>\u5fae\u4fe1\u652f\u4ed8\u73b0\u5728\u5728\u6211\u4eec\u7684\u751f\u6d3b\u4e2d\u666e\u904d\u7686\u662f\uff0c\u5728\u5f00\u53d1\u5f53\u4e2d\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u4e5f\u975e\u5e38\u7684\u706b\uff0c\u672c\u6587\u6211\u4eec\u7ee7\u7eed\u7ed9\u5927\u5bb6\u8bb2\u89e3\u5173\u4e8e\u6574\u5408\u5fae\u4fe1\u652f\u4ed8\u529f\u80fd\u3002<\/p>\n<p>1\u3001\u5fae\u4fe1\u516c\u4f17\u53f7\uff1a<\/p>\n<p>\u3000\u3000\u72ec\u7279\u7684appid\u3001appscrect\u3001\u63a5\u53e3\u6743\u9650\u4e4b\u4e2d\u8bbe\u7f6e\u53ef\u4ee5\u83b7\u53d6\u7528\u6237ID\u4fe1\u606f\u6743\u9650\u7684\u57df\u540d\uff08\u6bcf\u4e2a\u7528\u6237\u5bf9\u4e8e\u4e0d\u540c\u516c\u4f17\u90fd\u4f1a\u6709\u4e00\u4e2a\u7279\u6709ID\uff0c\u901a\u8fc7\u8fd9\u4e2aID\u83b7\u53d6\u7528\u6237\u5fae\u4fe1\u8d26\u53f7\u57fa\u672c\u4fe1\u606f\u3001\u8be6\u60c5\u770b\u5fae\u4fe1\u5f00\u53d1\u8005\u6587\u6863\uff09\u3001\u5728\u5fae\u4fe1\u652f\u4ed8\u6309\u94ae\u51fa\u8bbe\u7f6e\u5fae\u4fe1\u652f\u4ed8\u6388\u6743\u76ee\u5f55\uff08\u5199\u5230\u53d1\u8d77\u8bf7\u6c42\u7684\u63a7\u5236\u5668\u90a3\u4e00\u5c42\uff09\u3001\u8bbe\u7f6e\u5f00\u53d1\u8005\u5fae\u4fe1\u8d26\u53f7\u4e3a\u6d4b\u8bd5\u767d\u540d\u5355\uff08\u7528\u5fae\u4fe1\u5f00\u53d1\u8005\u5de5\u5177\u7684\u65f6\u5019\u9700\u8981\uff09<\/p>\n<p>2\u3001\u5fae\u4fe1\u652f\u4ed8\u5e73\u53f0\uff1a<\/p>\n<p>\u3000\u3000\u5546\u6237\u5e73\u53f0\u767b\u9646\u8d26\u53f7\u3001\u652f\u4ed8\u5bc6\u94a5\uff08\u968f\u65f6\u53ef\u4ee5\u81ea\u884c\u8bbe\u7f6e\uff0c\u53ea\u80fd\u6709\u4e00\u4e2a\uff09\u3001<\/p>\n<p><span>\u7acb\u5373\u5b66\u4e60<\/span>\u201c\u201d\uff1b<\/p>\n<p>3\u3001\u6574\u5408\u8fdb\u53bbthinkphp\u4e4b\u4e2d\u903b\u8f91\uff1a<\/p>\n<p>\u3000\u3000\u524d\u7aef\u5fae\u4fe1\u652f\u4ed8\u6309\u94ae\u8bbe\u7f6e\u70b9\u51fb\u8c03\u7528\u652f\u4ed8\u53d1\u8d77\u63a7\u5236\u5668\u65b9\u6cd5\u3001<\/p>\n<p>\u3000\u3000\u63a7\u5236\u5668\u8fd0\u884c\uff0c\u5f15\u7528\u5fae\u4fe1\u652f\u4ed8\u7c7b\u3001\u83b7\u53d6\u7528\u6237openid\u3001\u83b7\u53d6\u8ba2\u5355\u6570\u636e\u3001\u62fc\u63a5\u51fa\u6240\u6709\u666e\u901a\u5546\u6237\u9884\u652f\u4ed8jsp\u9700\u8981\u7684\u6570\u636e\uff0cdisplay\u51fa\u90a3\u4e2a\u81ea\u5b9a\u4e49\u7684\u652f\u4ed8\u9875\u9762\u3001<\/p>\n<p>\u3000\u3000\u5728\u652f\u4ed8\u9875\u9762\u70b9\u51fb\u652f\u4ed8\u3001\u8c03\u7528\u5fae\u4fe1\u63d0\u4f9b\u7684jspi\u53d1\u8d77\u652f\u4ed8\u7684scripet\u51fd\u6570\u53d1\u8d77\u652f\u4ed8\u3001<\/p>\n<p>\u3000\u3000\u652f\u4ed8\u5b8c\u6210\u4ee5\u540e\u9875\u9762\u4f1a\u91cd\u5b9a\u5411\u5230\uff08\u5728\u81ea\u5b9a\u4e49\u652f\u4ed8\u9875\u9762\u7684script\u51fd\u6570\u91cc\u8bbe\u7f6e\u7684\u8df3\u8f6c\u76ee\u5f55{:U(&#8216;controller\/function)}\uff09,\u5e76\u4e14\u5f02\u6b65\uff08\u9759\u9ed8\uff09\u8bbe\u7f6e\u7684\u5f02\u6b65\u5904\u7406\u8ba2\u5355\u903b\u8f91\uff08\u8bb0\u5f55\u652f\u4ed8\u65f6\u95f4\u5566\u3001\u6807\u8bb0\u4e3a\u5df2\u7ecf\u652f\u4ed8\u5566\u3001\u6807\u8bb0\u662f\u5fae\u4fe1\u652f\u4ed8\u5566\uff09\u4e4b\u7c7b\u7684\u3001<\/p>\n<p>\u4ee3\u7801\uff1a<\/p>\n<p>\u3000\u3000\u6211\u7684\u8ba2\u5355\u9875\u9762\u7684\u5fae\u4fe1\u652f\u4ed8\u6309\u94ae\uff1a<\/p>\n<\/p>\n<p>\u53d1\u8d77\u652f\u4ed8\u63a7\u5236\u5668Wxpay:<\/p>\n<pre>&lt;?php namespace HomeController;\r\nuse ThinkController;\r\n\/\/\u5fae\u4fe1\u652f\u4ed8\u7c7b\r\nclass WxpayController extends Controller {\r\n \/\/\u83b7\u53d6access_token\u8fc7\u7a0b\u4e2d\u7684\u8df3\u8f6curi\uff0c\u901a\u8fc7\u8df3\u8f6c\u5c06code\u4f20\u5165jsapi\u652f\u4ed8\u9875\u9762\r\n public function js_api_start(){\r\n  if(!empty($_GET[&#039;order_key_num&#039;])){\r\n   \/\/ session(array(&#039;pay_now_id&#039;=&gt;$_GET['order_key_num'],'expire'=&amp;gt;3600));\r\n&nbsp;&nbsp;&nbsp;S('pay_now_id',$_GET['order_key_num'],3600);\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;vendor('Weixinpay.WxPayPubHelper');\r\n&nbsp;&nbsp;\/\/\u4f7f\u7528jsapi\u63a5\u53e3\r\n&nbsp;&nbsp;$jsApi&nbsp;=&nbsp;new&nbsp;JsApi_pub();\r\n&nbsp;&nbsp;\/\/=========\u6b65\u9aa41\uff1a\u7f51\u9875\u6388\u6743\u83b7\u53d6\u7528\u6237openid============\r\n&nbsp;&nbsp;\/\/\u901a\u8fc7code\u83b7\u5f97openid\r\n&nbsp;&nbsp;&nbsp;if($_GET['code']&nbsp;==&nbsp;''){\r\n&nbsp;&nbsp;&nbsp;\/\/\u8df3\u8f6c\r\n&nbsp;&nbsp;&nbsp;&nbsp;$redirect_uri&nbsp;=&nbsp;'https:\/\/\u5f53\u524d\u57df\u540d+\u6a21\u5757+\u63a7\u5236\u5668+\u65b9\u6cd5';\r\n&nbsp;&nbsp;&nbsp;&nbsp;$url&nbsp;=&nbsp;'https:\/\/open.weixin.qq.com\/connect\/oauth2\/authorize\r\n&nbsp;&nbsp;&nbsp;&nbsp;?appid=\u516c\u4f17\u53f7\u7279\u6709IDredirect_uri='.$redirect_uri.'&amp;amp;response_type=code&amp;amp;scope=snsapi_base&amp;amp;state=STATE#wechat_redirect';\r\n&nbsp;&nbsp;&nbsp;&nbsp;header(\"Location:&nbsp;$url\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;exit();\r\n&nbsp;&nbsp;&nbsp;}else{\r\n&nbsp;&nbsp;&nbsp;\/\/\u83b7\u53d6openid\r\n&nbsp;&nbsp;&nbsp;$url&nbsp;=&nbsp;'https:\/\/api.weixin.qq.com\/sns\/oauth2\/access_token\r\n&nbsp;&nbsp;&nbsp;?appid=\u516c\u4f17\u53f7ID&amp;amp;secret=\u516c\u4f17\u53f7scrept&amp;amp;code='.$_GET['code'].'&amp;amp;grant_type=authorization_code';&nbsp;\r\n&nbsp;&nbsp;&nbsp;$openid_arr&nbsp;=&nbsp;json_decode(file_get_contents($url),true);\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;$openid=$openid_arr['openid'];\r\n&nbsp;&nbsp;$pay_now_id&nbsp;=&nbsp;S('pay_now_id');\r\n&nbsp;&nbsp;if($pay_now_id){\r\n&nbsp;&nbsp;&nbsp;$id=$pay_now_id;\r\n&nbsp;&nbsp;&nbsp;$o&nbsp;=&nbsp;D('order_info');\r\n&nbsp;&nbsp;&nbsp;$order_info&nbsp;=&nbsp;$o-&amp;gt;where('order_id&nbsp;=&nbsp;%d',$id)-&amp;gt;find();\r\n&nbsp;&nbsp;&nbsp;if(empty($order_info['paycode'])){\r\n&nbsp;&nbsp;&nbsp;&nbsp;$order_info['paycode']&nbsp;=&nbsp;'weixin';\r\n&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;if($order_info['is_pay']){\r\n&nbsp;&nbsp;&nbsp;&nbsp;$this-&amp;gt;error('\u5f53\u524d\u8ba2\u5355\u5df2\u7ecf\u652f\u4ed8');\r\n&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;}else{\r\n&nbsp;&nbsp;&nbsp;$this-&amp;gt;error(\"\u4e0d\u5b58\u5728\u5f53\u524d\u8ba2\u5355\u7f16\u53f7!\");\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;$res&nbsp;=&nbsp;array(\r\n&nbsp;&nbsp;&nbsp;'order_sn'&nbsp;=&amp;gt;&nbsp;$order_info['order_sn'],\r\n&nbsp;&nbsp;&nbsp;'order_amount'&nbsp;=&amp;gt;&nbsp;$order_info['pay_money']\r\n&nbsp;&nbsp;&nbsp;);\r\n&nbsp;&nbsp;\/\/=========\u6b65\u9aa42\uff1a\u4f7f\u7528\u7edf\u4e00\u652f\u4ed8\u63a5\u53e3\uff0c\u83b7\u53d6prepay_id============\r\n&nbsp;&nbsp;\/\/\u4f7f\u7528\u7edf\u4e00\u652f\u4ed8\u63a5\u53e3\r\n&nbsp;&nbsp;$unifiedOrder&nbsp;=&nbsp;new&nbsp;UnifiedOrder_pub();\r\n&nbsp;&nbsp;\/\/\u8bbe\u7f6e\u7edf\u4e00\u652f\u4ed8\u63a5\u53e3\u53c2\u6570\r\n&nbsp;&nbsp;\/\/\u8bbe\u7f6e\u5fc5\u586b\u53c2\u6570\r\n&nbsp;&nbsp;\/\/appid\u5df2\u586b,\u5546\u6237\u65e0\u9700\u91cd\u590d\u586b\u5199\r\n&nbsp;&nbsp;\/\/mch_id\u5df2\u586b,\u5546\u6237\u65e0\u9700\u91cd\u590d\u586b\u5199\r\n&nbsp;&nbsp;\/\/noncestr\u5df2\u586b,\u5546\u6237\u65e0\u9700\u91cd\u590d\u586b\u5199\r\n&nbsp;&nbsp;\/\/spbill_create_ip\u5df2\u586b,\u5546\u6237\u65e0\u9700\u91cd\u590d\u586b\u5199\r\n&nbsp;&nbsp;\/\/sign\u5df2\u586b,\u5546\u6237\u65e0\u9700\u91cd\u590d\u586b\u5199\r\n&nbsp;&nbsp;$total_fee&nbsp;=&nbsp;$order_info['pay_money']*100;\r\n&nbsp;&nbsp;\/\/&nbsp;$total_fee&nbsp;=&nbsp;$res['order_amount'];\r\n&nbsp;&nbsp;\/\/$total_fee&nbsp;=&nbsp;1;\r\n&nbsp;&nbsp;\/\/&nbsp;var_dump($order_info['pay_money']);die;\r\n&nbsp;&nbsp;$body&nbsp;=&nbsp;\"\u8ba2\u5355\u652f\u4ed8\";\r\n&nbsp;&nbsp;$unifiedOrder-&amp;gt;setParameter(\"openid\",&nbsp;\"$openid\");\/\/\u7528\u6237\u6807\u8bc6\r\n&nbsp;&nbsp;$unifiedOrder-&amp;gt;setParameter(\"body\",&nbsp;'\u5546\u54c1\u91c7\u8d2d');\/\/\u5546\u54c1\u63cf\u8ff0\r\n&nbsp;&nbsp;\/\/\u81ea\u5b9a\u4e49\u8ba2\u5355\u53f7\uff0c\u6b64\u5904\u4ec5\u4f5c\u4e3e\u4f8b\r\n&nbsp;&nbsp;$unifiedOrder-&amp;gt;setParameter(\"out_trade_no\",&nbsp;$order_info['order_sn']);\/\/\u5546\u6237\u8ba2\u5355\u53f7&nbsp;\r\n&nbsp;&nbsp;$unifiedOrder-&amp;gt;setParameter(\"total_fee\",&nbsp;$total_fee);\/\/\u603b\u91d1\u989d\r\n&nbsp;&nbsp;\/\/$unifiedOrder-&amp;gt;setParameter(\"attach\",&nbsp;\"order_sn={$res['order_sn']}\");\/\/\u9644\u52a0\u6570\u636e&nbsp;\r\n&nbsp;&nbsp;$unifiedOrder-&amp;gt;setParameter(\"notify_url\",&nbsp;WxPayConf_pub::NOTIFY_URL);\/\/\u901a\u77e5\u5730\u5740&nbsp;\r\n&nbsp;&nbsp;$unifiedOrder-&amp;gt;setParameter(\"trade_type\",&nbsp;\"JSAPI\");\/\/\u4ea4\u6613\u7c7b\u578b\r\n&nbsp;&nbsp;\/\/\u975e\u5fc5\u586b\u53c2\u6570\uff0c\u5546\u6237\u53ef\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u9009\u586b\r\n&nbsp;&nbsp;\/\/$unifiedOrder-&amp;gt;setParameter(\"sub_mch_id\",\"XXXX\");\/\/\u5b50\u5546\u6237\u53f7&nbsp;\r\n&nbsp;&nbsp;\/\/$unifiedOrder-&amp;gt;setParameter(\"device_info\",\"XXXX\");\/\/\u8bbe\u5907\u53f7&nbsp;\r\n&nbsp;&nbsp;\/\/$unifiedOrder-&amp;gt;setParameter(\"attach\",\"XXXX\");\/\/\u9644\u52a0\u6570\u636e&nbsp;\r\n&nbsp;&nbsp;\/\/$unifiedOrder-&amp;gt;setParameter(\"time_start\",\"XXXX\");\/\/\u4ea4\u6613\u8d77\u59cb\u65f6\u95f4\r\n&nbsp;&nbsp;\/\/$unifiedOrder-&amp;gt;setParameter(\"time_expire\",\"XXXX\");\/\/\u4ea4\u6613\u7ed3\u675f\u65f6\u95f4&nbsp;\r\n&nbsp;&nbsp;\/\/$unifiedOrder-&amp;gt;setParameter(\"goods_tag\",\"XXXX\");\/\/\u5546\u54c1\u6807\u8bb0&nbsp;\r\n&nbsp;&nbsp;\/\/$unifiedOrder-&amp;gt;setParameter(\"openid\",\"XXXX\");\/\/\u7528\u6237\u6807\u8bc6\r\n&nbsp;&nbsp;\/\/$unifiedOrder-&amp;gt;setParameter(\"product_id\",\"XXXX\");\/\/\u5546\u54c1ID\r\n&nbsp;&nbsp;$prepay_id&nbsp;=&nbsp;$unifiedOrder-&amp;gt;getPrepayId();\r\n&nbsp;&nbsp;\/\/&nbsp;var_dump($prepay_id);die;\r\n&nbsp;&nbsp;\/\/=========\u6b65\u9aa43\uff1a\u4f7f\u7528jsapi\u8c03\u8d77\u652f\u4ed8============\r\n&nbsp;&nbsp;$jsApi-&amp;gt;setPrepayId($prepay_id);\r\n&nbsp;&nbsp;$jsApiParameters&nbsp;=&nbsp;$jsApi-&amp;gt;getParameters();\r\n&nbsp;&nbsp;$wxconf&nbsp;=&nbsp;json_decode($jsApiParameters,&nbsp;true);\r\n&nbsp;&nbsp;if&nbsp;($wxconf['package']&nbsp;==&nbsp;'prepay_id=')&nbsp;{\r\n&nbsp;&nbsp;&nbsp;$this-&amp;gt;error('\u5f53\u524d\u8ba2\u5355\u5b58\u5728\u5f02\u5e38!');\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;$this-&amp;gt;assign('res',&nbsp;$res);\r\n&nbsp;&nbsp;$this-&amp;gt;assign('jsApiParameters',&nbsp;$jsApiParameters);\r\n&nbsp;&nbsp;$this-&amp;gt;display('jsapi');\r\n&nbsp;}\r\n&nbsp;\/\/\u5f02\u6b65\u901a\u77e5url\uff0c\u5546\u6237\u6839\u636e\u5b9e\u9645\u5f00\u53d1\u8fc7\u7a0b\u8bbe\u5b9a\r\n&nbsp;public&nbsp;function&nbsp;notify_url()&nbsp;{\r\n&nbsp;&nbsp;vendor('Weixinpay.WxPayPubHelper');\r\n&nbsp;&nbsp;\/\/\u4f7f\u7528\u901a\u7528\u901a\u77e5\u63a5\u53e3\r\n&nbsp;&nbsp;$notify&nbsp;=&nbsp;new&nbsp;Notify_pub();\r\n&nbsp;&nbsp;\/\/\u5b58\u50a8\u5fae\u4fe1\u7684\u56de\u8c03\r\n&nbsp;&nbsp;$xml&nbsp;=&nbsp;$GLOBALS['HTTP_RAW_POST_DATA'];&nbsp;\r\n&nbsp;&nbsp;$notify-&amp;gt;saveData($xml);\r\n&nbsp;&nbsp;\/\/\u9a8c\u8bc1\u7b7e\u540d\uff0c\u5e76\u56de\u5e94\u5fae\u4fe1\u3002\r\n&nbsp;&nbsp;\/\/\u5bf9\u540e\u53f0\u901a\u77e5\u4ea4\u4e92\u65f6\uff0c\u5982\u679c\u5fae\u4fe1\u6536\u5230\u5546\u6237\u7684\u5e94\u7b54\u4e0d\u662f\u6210\u529f\u6216\u8d85\u65f6\uff0c\u5fae\u4fe1\u8ba4\u4e3a\u901a\u77e5\u5931\u8d25\uff0c\r\n&nbsp;&nbsp;\/\/\u5fae\u4fe1\u4f1a\u901a\u8fc7\u4e00\u5b9a\u7684\u7b56\u7565\uff08\u598230\u5206\u949f\u51718\u6b21\uff09\u5b9a\u671f\u91cd\u65b0\u53d1\u8d77\u901a\u77e5\uff0c\r\n&nbsp;&nbsp;\/\/\u5c3d\u53ef\u80fd\u63d0\u9ad8\u901a\u77e5\u7684\u6210\u529f\u7387\uff0c\u4f46\u5fae\u4fe1\u4e0d\u4fdd\u8bc1\u901a\u77e5\u6700\u7ec8\u80fd\u6210\u529f\u3002\r\n&nbsp;&nbsp;if($notify-&amp;gt;checkSign()&nbsp;==&nbsp;FALSE){\r\n&nbsp;&nbsp;&nbsp;$notify-&amp;gt;setReturnParameter(\"return_code\",&nbsp;\"FAIL\");\/\/\u8fd4\u56de\u72b6\u6001\u7801\r\n&nbsp;&nbsp;&nbsp;$notify-&amp;gt;setReturnParameter(\"return_msg\",&nbsp;\"\u7b7e\u540d\u5931\u8d25\");\/\/\u8fd4\u56de\u4fe1\u606f\r\n&nbsp;&nbsp;}else{\r\n&nbsp;&nbsp;&nbsp;$notify-&amp;gt;setReturnParameter(\"return_code\",&nbsp;\"SUCCESS\");\/\/\u8bbe\u7f6e\u8fd4\u56de\u7801\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;$returnXml&nbsp;=&nbsp;$notify-&amp;gt;returnXml();\r\n&nbsp;&nbsp;\/\/==\u5546\u6237\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8bbe\u7f6e\u76f8\u5e94\u7684\u5904\u7406\u6d41\u7a0b\uff0c\u6b64\u5904\u4ec5\u4f5c\u4e3e\u4f8b=======\r\n&nbsp;&nbsp;\/\/\u4ee5log\u6587\u4ef6\u5f62\u5f0f\u8bb0\u5f55\u56de\u8c03\u4fe1\u606f\r\n&nbsp;&nbsp;\/\/$log_name&nbsp;=&nbsp;\"notify_url.log\";\/\/log\u6587\u4ef6\u8def\u5f84\r\n&nbsp;&nbsp;\/\/$this-&amp;gt;log_result($log_name,&nbsp;\"\u3010\u63a5\u6536\u5230\u7684notify\u901a\u77e5\u3011:\n\".$xml.\"\n\");\r\n&nbsp;&nbsp;$parameter&nbsp;=&nbsp;$notify-&amp;gt;xmlToArray($xml);\r\n&nbsp;&nbsp;\/\/$this-&amp;gt;log_result($log_name,&nbsp;\"\u3010\u63a5\u6536\u5230\u7684notify\u901a\u77e5\u3011:\n\".$parameter.\"\n\");\r\n&nbsp;&nbsp;if($notify-&amp;gt;checkSign()&nbsp;==&nbsp;TRUE){\r\n&nbsp;&nbsp;&nbsp;if&nbsp;($notify-&amp;gt;data[\"return_code\"]&nbsp;==&nbsp;\"FAIL\")&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6b64\u5904\u5e94\u8be5\u66f4\u65b0\u4e00\u4e0b\u8ba2\u5355\u72b6\u6001\uff0c\u5546\u6237\u81ea\u884c\u589e\u5220\u64cd\u4f5c\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/$this-&amp;gt;log_result($log_name,&nbsp;\"\u3010\u901a\u4fe1\u51fa\u9519\u3011:\n\".$xml.\"\n\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u66f4\u65b0\u8ba2\u5355\u6570\u636e\u3010\u901a\u4fe1\u51fa\u9519\u3011\u8bbe\u4e3a\u65e0\u6548\u8ba2\u5355\r\n&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;'error';\r\n&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;else&nbsp;if($notify-&amp;gt;data[\"result_code\"]&nbsp;==&nbsp;\"FAIL\"){\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6b64\u5904\u5e94\u8be5\u66f4\u65b0\u4e00\u4e0b\u8ba2\u5355\u72b6\u6001\uff0c\u5546\u6237\u81ea\u884c\u589e\u5220\u64cd\u4f5c\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/$this-&amp;gt;log_result($log_name,&nbsp;\"\u3010\u4e1a\u52a1\u51fa\u9519\u3011:\n\".$xml.\"\n\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u66f4\u65b0\u8ba2\u5355\u6570\u636e\u3010\u901a\u4fe1\u51fa\u9519\u3011\u8bbe\u4e3a\u65e0\u6548\u8ba2\u5355\r\n&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;'error';\r\n&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;else{\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/$this-&amp;gt;log_result($log_name,&nbsp;\"\u3010\u652f\u4ed8\u6210\u529f\u3011:\n\".$xml.\"\n\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6211\u8fd9\u91cc\u7528\u5230\u4e00\u4e2aprocess\u65b9\u6cd5\uff0c\u6210\u529f\u8fd4\u56de\u6570\u636e\u540e\u5904\u7406\uff0c\u8fd4\u56de\u5730\u6570\u636e\u5177\u4f53\u53ef\u4ee5\u53c2\u8003\u5fae\u4fe1\u7684\u6587\u6863\r\n&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($this-&amp;gt;process($parameter))&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5904\u7406\u6210\u529f\u540e\u8f93\u51fasuccess\uff0c\u5fae\u4fe1\u5c31\u4e0d\u4f1a\u518d\u4e0b\u53d1\u8bf7\u6c42\u4e86\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;'success';\r\n&nbsp;&nbsp;&nbsp;&nbsp;}else&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6ca1\u6709\u5904\u7406\u6210\u529f\uff0c\u5fae\u4fe1\u4f1a\u95f4\u9694\u7684\u53d1\u9001\u8bf7\u6c42\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;'error';\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;}\r\n&nbsp;}\r\n&nbsp;\/\/\u8ba2\u5355\u5904\u7406\r\n&nbsp;private&nbsp;function&nbsp;process($parameter)&nbsp;{\r\n&nbsp;&nbsp;\/\/\u6b64\u5904\u5e94\u8be5\u66f4\u65b0\u4e00\u4e0b\u8ba2\u5355\u72b6\u6001\uff0c\u5546\u6237\u81ea\u884c\u589e\u5220\u64cd\u4f5c\r\n&nbsp;&nbsp;\/*\r\n&nbsp;&nbsp;*&nbsp;\u8fd4\u56de\u7684\u6570\u636e\u6700\u5c11\u6709\u4ee5\u4e0b\u51e0\u4e2a\r\n&nbsp;&nbsp;*&nbsp;$parameter&nbsp;=&nbsp;array(\r\n&nbsp;&nbsp;&nbsp;'out_trade_no'&nbsp;=&amp;gt;&nbsp;xxx,\/\/\u5546\u6237\u8ba2\u5355\u53f7\r\n&nbsp;&nbsp;&nbsp;'total_fee'&nbsp;=&amp;gt;&nbsp;XXXX,\/\/\u652f\u4ed8\u91d1\u989d\r\n&nbsp;&nbsp;&nbsp;'openid'&nbsp;=&amp;gt;&nbsp;XXxxx,\/\/\u4ed8\u6b3e\u7684\u7528\u6237ID\r\n&nbsp;&nbsp;);\r\n&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;$data&nbsp;=&nbsp;array(\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'order_sn'=&amp;gt;$parameter['out_trade_no'],\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'des'=&amp;gt;('\u8ba2\u5355\u4ea4\u6613\uff1a'.$parameter['out_trade_no']),\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'money'=&amp;gt;$parameter['total_fee'],\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);\r\n&nbsp;&nbsp;orderhandlestarysdgdss($data);\/\/\u8fd9\u662f\u4e00\u4e2acommon\u65b9\u6cd5\uff0c\u4ed6\u4f1a\u5c06\u8be5\u8ba2\u5355\u72b6\u6001\u8bbe\u7f6e\u4e3a\u5df2\u652f\u4ed8\u4e4b\u7c7b\u7684\r\n&nbsp;&nbsp;return&nbsp;true;\r\n&nbsp;}\r\n}\r\n?&amp;gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u53d1\u8d77\u652f\u4ed8\u540e\u62fc\u63a5\u9884\u652f\u4ed8\u6570\u636e\u53c2\u6570\uff08\u53c2\u6570\u5217\u8868\u770b\u5fae\u4fe1\u666e\u901a\u5546\u6237\u5f00\u53d1\u8005\u6587\u6863\u2014\u2014\u5fae\u4fe1\u652f\u4ed8\u2014\u2014\u7edf\u4e00\u4e0b\u5355\uff09display\u7684\u9875\u9762\uff1a<\/p>\n<pre>nbsp;html&amp;gt;\r\n\r\n\r\n&lt;meta&gt;&lt;meta&gt;&lt;meta&gt;&lt;meta&gt;&nbsp;\r\n&lt;title&gt;\u4e0b&lt;\/title&gt;&lt;meta&gt;&lt;meta&gt;&lt;meta&gt;&lt;script&gt;\r\nvar order_sn = \"{$res[&#039;order_sn&#039;]}\";\r\n\/\/\u8c03\u7528\u5fae\u4fe1JS api \u652f\u4ed8\r\nfunction jsApiCall(){\r\n WeixinJSBridge.invoke(\r\n  &#039;getBrandWCPayRequest&#039;,\r\n  &lt;?php echo $jsApiParameters; ?&gt;,\r\n  function(res){\r\n   \/\/\u5982\u679c\u652f\u4ed8\u6210\u529f\r\n   if (res.err_msg == &#039;get_brand_wcpay_request:ok&#039;) {\r\n    \/\/\u652f\u4ed8\u6210\u529f\u540e\u8df3\u8f6c\u7684\u5730\u5740\r\n    location.href = \"{:U(&#039;Home\/User\/my_order&#039;)}\";\r\n   }else if (res.err_msg == &#039;get_brand_wcpay_request:cancel&#039;) {\r\n    alert(&#039;\u8bf7\u5c3d\u5feb\u5b8c\u6210\u652f\u4ed8\u54e6\uff01&#039;);\r\n   }else if (res.err_msg == &#039;get_brand_wcpay_request:fail&#039;) {\r\n    alert(&#039;\u652f\u4ed8\u5931\u8d25&#039;);\r\n   }else {\r\n    alert(&#039;\u610f\u5916\u9519\u8bef&#039;);\r\n   }\r\n   \/\/WeixinJSBridge.log(res.err_msg);\r\n   \/\/alert(res.err_code+res.err_desc+res.err_msg);\r\n   \/*if (res.err_msg == &#039;get_brand_wcpay_request:ok&#039;) {\r\n    alert(&#039;\u652f\u4ed8\u6210\u529f&#039;);\r\n   }else {\r\n    alert(&#039;\u53d6\u6d88\u652f\u4ed8&#039;);\r\n   }*\/\r\n  }\r\n );\r\n}\r\nfunction callpay(){\r\n if (typeof WeixinJSBridge == \"undefined\"){\r\n  if( document.addEventListener ){\r\n   document.addEventListener(&#039;WeixinJSBridgeReady&#039;, jsApiCall, false);\r\n  }else if (document.attachEvent){\r\n   document.attachEvent(&#039;WeixinJSBridgeReady&#039;, jsApiCall); \r\n   document.attachEvent(&#039;onWeixinJSBridgeReady&#039;, jsApiCall);\r\n  }\r\n }else{\r\n  jsApiCall();\r\n }\r\n}\r\n&lt;\/script&gt;&lt;style&gt;\r\n*{font-family:&#039;\u5fae\u8f6f\u96c5\u9ed1&#039;,&#039;Microsoft YaHei&#039;;}\r\nbody #head{position:relative;z-index:99999999999999;padding:0 10px;}\r\nbody .zh-head{padding:0 0 0 0;height:auto;}\r\n.zh-head-conter{position:relative;height:40px;}\r\n.zh-logo{position:absolute;left:50%;top:0;margin:0 0 0 -60px;float:none;width:auto;}\r\n.zh-logo a{display:block;}\r\n.zh-logo img{width:120px;height:40px;display:block;}\r\n.heads_fix .zh-logo{}\r\n#head{position:fixed!important;left:0;top:0;right:0;z-index:99999;background:#fff;border-bottom:1px solid #ddd;}\r\n.zh-logo{height:40px;}\r\n.flowpay{margin-top:25%;}\r\n.flowpay dt{text-align:center;}\r\n.flowpay strong.price{font-size:40px;}\r\n.wxLogo{text-align:center;}\r\n.wxLogo img{}\r\n.flowpay dd{margin:0;padding:20px 0 10px 0;}\r\n.flowpay dd input{margin:0 auto;padding:0;width:90%;height:45px;line-height:45px;border:0;border-radius:4px;background:#0CBC0A;color:#fff;font-size:17px;display:block;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;}\r\n&lt;\/style&gt;&lt;!--\u5934\u90e8\u5f00\u59cb--&gt;&lt;div&gt;\r\n&nbsp;&lt;dl&gt;\r\n&nbsp;&nbsp;&lt;dt&gt;\r\n&nbsp;&nbsp;&nbsp;&lt;p&gt;@@##@@&lt;\/p&gt;\r\n&nbsp;&nbsp;&nbsp;\u672c\u6b21\u8ba2\u5355\u9700\u652f\u4ed8\uff1a\uffe5&lt;strong&gt;{$res['order_amount']}&lt;\/strong&gt;&nbsp;\u5143\r\n&nbsp;&nbsp;&lt;\/dt&gt;\r\n&nbsp;&nbsp;&lt;dd&gt;\r\n&nbsp;&nbsp;&nbsp;&lt;input&gt;\r\n&nbsp;&nbsp;&lt;\/dd&gt;\r\n&nbsp;&lt;\/dl&gt;\n&lt;\/div&gt;\r\n&lt;!--\u5c3e\u7ed3\u675f--&gt;\r\n\r\n<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>&nbsp; &nbsp;<\/p>\n<p>\u7136\u540e\u5c31\u662f\u7c7b\u6587\u4ef6\u5566\uff1a<\/p>\n<p><img><\/p>\n<p>\u90a3\u4e2acacert\u662f\u8bc1\u4e66\u5b58\u653e\u76ee\u5f55\uff1b\u8bc1\u4e66\u4e0d\u4e00\u5b9a\u9700\u8981\u7684\uff1b<\/p>\n<p>vendor\u6587\u4ef6\u5939\u5728\u6211\u7684\u6587\u4ef6\u91cc\u9762\u627e\u627e\u5c31\u53ef\u4ee5\u3002<\/p>\n<p>\u4ee5\u4e0a\u5185\u5bb9\u5c31\u662fThinkphp\u6574\u5408\u5fae\u4fe1\u652f\u4ed8\u529f\u80fd\uff0c\u5e0c\u671b\u80fd\u5e2e\u52a9\u5230\u5927\u5bb6\u3002<\/p>\n<p>\u76f8\u5173\u63a8\u8350\uff1a<\/p>\n<\/p>\n<\/p>\n<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/\/upload\/image\/931\/519\/619\/1512181122888269.png\" class=\"aligncenter\" title=\"Thinkphp\u6574\u5408\u5fae\u4fe1\u652f\u4ed8\u529f\u80fd\u8be6\u89e3\u63d2\u56fe\" alt=\"Thinkphp\u6574\u5408\u5fae\u4fe1\u652f\u4ed8\u529f\u80fd\u8be6\u89e3\u63d2\u56fe\" \/> <\/p>\n<p>\u4ee5\u4e0a\u5c31\u662fThinkphp\u6574\u5408\u5fae\u4fe1\u652f\u4ed8\u529f\u80fd\u8be6\u89e3\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5fae\u4fe1\u652f\u4ed8\u73b0\u5728\u5728\u6211\u4eec\u7684\u751f\u6d3b\u4e2d\u666e\u904d\u7686\u662f\uff0c\u5728\u5f00\u53d1\u5f53\u4e2d\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u4e5f\u975e\u5e38\u7684\u706b\uff0c\u672c\u6587\u6211\u4eec\u7ee7\u7eed\u7ed9\u5927\u5bb6\u8bb2\u89e3\u5173\u4e8e\u6574\u5408\u5fae\u4fe1\u652f\u4ed8\u529f\u80fd\u3002 1\u3001\u5fae\u4fe1\u516c\u4f17\u53f7\uff1a \u3000\u3000\u72ec\u7279\u7684appid\u3001appscrect\u3001\u63a5\u53e3\u6743\u9650\u4e4b\u4e2d\u8bbe\u7f6e\u53ef\u4ee5\u83b7\u53d6\u7528\u6237ID\u4fe1\u606f\u6743\u9650\u7684\u57df\u540d\uff08\u6bcf\u4e2a\u7528\u6237\u5bf9\u4e8e\u4e0d\u540c\u516c\u4f17\u90fd\u4f1a\u6709\u4e00\u4e2a\u7279\u6709ID\uff0c\u901a\u8fc7\u8fd9\u4e2aID\u83b7\u53d6\u7528\u6237\u5fae\u4fe1\u8d26\u53f7\u57fa\u672c\u4fe1\u606f\u3001\u8be6\u60c5\u770b\u5fae\u4fe1\u5f00\u53d1\u8005\u6587\u6863\uff09\u3001\u5728\u5fae\u4fe1\u652f\u4ed8\u6309\u94ae\u51fa\u8bbe\u7f6e\u5fae\u4fe1\u652f\u4ed8\u6388\u6743\u76ee\u5f55\uff08\u5199\u5230\u53d1\u8d77\u8bf7\u6c42\u7684\u63a7\u5236\u5668\u90a3\u4e00\u5c42\uff09\u3001\u8bbe\u7f6e\u5f00\u53d1\u8005\u5fae\u4fe1\u8d26\u53f7\u4e3a\u6d4b\u8bd5\u767d\u540d\u5355\uff08\u7528\u5fae\u4fe1\u5f00\u53d1\u8005\u5de5\u5177\u7684\u65f6\u5019\u9700\u8981\uff09 2\u3001\u5fae\u4fe1\u652f\u4ed8\u5e73\u53f0\uff1a \u3000\u3000\u5546\u6237\u5e73\u53f0\u767b\u9646\u8d26\u53f7\u3001\u652f\u4ed8\u5bc6\u94a5\uff08\u968f\u65f6\u53ef\u4ee5\u81ea\u884c\u8bbe\u7f6e\uff0c\u53ea\u80fd\u6709\u4e00\u4e2a\uff09\u3001 \u7acb\u5373\u5b66\u4e60\u201c\u201d\uff1b 3\u3001\u6574\u5408\u8fdb\u53bbthinkphp\u4e4b\u4e2d\u903b\u8f91\uff1a \u3000\u3000\u524d\u7aef\u5fae\u4fe1\u652f\u4ed8\u6309\u94ae\u8bbe\u7f6e\u70b9\u51fb\u8c03\u7528\u652f\u4ed8\u53d1\u8d77\u63a7\u5236\u5668\u65b9\u6cd5\u3001 \u3000\u3000\u63a7\u5236\u5668\u8fd0\u884c\uff0c\u5f15\u7528\u5fae\u4fe1\u652f\u4ed8\u7c7b\u3001\u83b7\u53d6\u7528\u6237openid\u3001\u83b7\u53d6\u8ba2\u5355\u6570\u636e\u3001\u62fc\u63a5\u51fa\u6240\u6709\u666e\u901a\u5546\u6237\u9884\u652f\u4ed8jsp\u9700\u8981\u7684\u6570\u636e\uff0cdisplay\u51fa\u90a3\u4e2a\u81ea\u5b9a\u4e49\u7684\u652f\u4ed8\u9875\u9762\u3001 \u3000\u3000\u5728\u652f\u4ed8\u9875\u9762\u70b9\u51fb\u652f\u4ed8\u3001\u8c03\u7528\u5fae\u4fe1\u63d0\u4f9b\u7684jspi\u53d1\u8d77\u652f\u4ed8\u7684scripet\u51fd\u6570\u53d1\u8d77\u652f\u4ed8\u3001 \u3000\u3000\u652f\u4ed8\u5b8c\u6210\u4ee5\u540e\u9875\u9762\u4f1a\u91cd\u5b9a\u5411\u5230\uff08\u5728\u81ea\u5b9a\u4e49\u652f\u4ed8\u9875\u9762\u7684script\u51fd\u6570\u91cc\u8bbe\u7f6e\u7684\u8df3\u8f6c\u76ee\u5f55{:U(&#8216;controller\/function)}\uff09,\u5e76\u4e14\u5f02\u6b65\uff08\u9759\u9ed8\uff09\u8bbe\u7f6e\u7684\u5f02\u6b65\u5904\u7406\u8ba2\u5355\u903b\u8f91\uff08\u8bb0\u5f55\u652f\u4ed8\u65f6\u95f4\u5566\u3001\u6807\u8bb0\u4e3a\u5df2\u7ecf\u652f\u4ed8\u5566\u3001\u6807\u8bb0\u662f\u5fae\u4fe1\u652f\u4ed8\u5566\uff09\u4e4b\u7c7b\u7684\u3001 \u4ee3\u7801\uff1a \u3000\u3000\u6211\u7684\u8ba2\u5355\u9875\u9762\u7684\u5fae\u4fe1\u652f\u4ed8\u6309\u94ae\uff1a \u53d1\u8d77\u652f\u4ed8\u63a7\u5236\u5668Wxpay: &lt;?php namespace HomeController; use ThinkController; \/\/\u5fae\u4fe1\u652f\u4ed8\u7c7b class WxpayController extends Controller { \/\/\u83b7\u53d6access_token\u8fc7\u7a0b\u4e2d\u7684\u8df3\u8f6curi\uff0c\u901a\u8fc7\u8df3\u8f6c\u5c06code\u4f20\u5165jsapi\u652f\u4ed8\u9875\u9762 public function js_api_start(){ if(!empty($_GET[&#039;order_key_num&#039;])){ \/\/ session(array(&#039;pay_now_id&#039;=&gt;$_GET[&#8216;order_key_num&#8217;],&#8217;expire&#8217;=&amp;gt;3600)); &nbsp;&nbsp;&nbsp;S(&#8216;pay_now_id&#8217;,$_GET[&#8216;order_key_num&#8217;],3600); &nbsp;&nbsp;} &nbsp;&nbsp;vendor(&#8216;Weixinpay.WxPayPubHelper&#8217;); &nbsp;&nbsp;\/\/\u4f7f\u7528jsapi\u63a5\u53e3 &nbsp;&nbsp;$jsApi&nbsp;=&nbsp;new&nbsp;JsApi_pub(); &nbsp;&nbsp;\/\/=========\u6b65\u9aa41\uff1a\u7f51\u9875\u6388\u6743\u83b7\u53d6\u7528\u6237openid============ &nbsp;&nbsp;\/\/\u901a\u8fc7code\u83b7\u5f97openid &nbsp;&nbsp;&nbsp;if($_GET[&#8216;code&#8217;]&nbsp;==&nbsp;&#8221;){ &nbsp;&nbsp;&nbsp;\/\/\u8df3\u8f6c &nbsp;&nbsp;&nbsp;&nbsp;$redirect_uri&nbsp;=&nbsp;&#8216;https:\/\/\u5f53\u524d\u57df\u540d+\u6a21\u5757+\u63a7\u5236\u5668+\u65b9\u6cd5&#8217;; &nbsp;&nbsp;&nbsp;&nbsp;$url&nbsp;=&nbsp;&#8216;https:\/\/open.weixin.qq.com\/connect\/oauth2\/authorize &nbsp;&nbsp;&nbsp;&nbsp;?appid=\u516c\u4f17\u53f7\u7279\u6709IDredirect_uri=&#8217;.$redirect_uri.&#8217;&amp;amp;response_type=code&amp;amp;scope=snsapi_base&amp;amp;state=STATE#wechat_redirect&#8217;; &nbsp;&nbsp;&nbsp;&nbsp;header(&#8220;Location:&nbsp;$url&#8221;); &nbsp;&nbsp;&nbsp;&nbsp;exit(); &nbsp;&nbsp;&nbsp;}else{ &nbsp;&nbsp;&nbsp;\/\/\u83b7\u53d6openid &nbsp;&nbsp;&nbsp;$url&nbsp;=&nbsp;&#8216;https:\/\/api.weixin.qq.com\/sns\/oauth2\/access_token &nbsp;&nbsp;&nbsp;?appid=\u516c\u4f17\u53f7ID&amp;amp;secret=\u516c\u4f17\u53f7scrept&amp;amp;code=&#8217;.$_GET[&#8216;code&#8217;].&#8217;&amp;amp;grant_type=authorization_code&#8217;;&nbsp; &nbsp;&nbsp;&nbsp;$openid_arr&nbsp;=&nbsp;json_decode(file_get_contents($url),true); &nbsp;&nbsp;} &nbsp;&nbsp;$openid=$openid_arr[&#8216;openid&#8217;]; &nbsp;&nbsp;$pay_now_id&nbsp;=&nbsp;S(&#8216;pay_now_id&#8217;); &nbsp;&nbsp;if($pay_now_id){ [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-31026","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/31026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=31026"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/31026\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=31026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=31026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=31026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}