{"id":31409,"date":"2024-11-25T12:29:15","date_gmt":"2024-11-25T04:29:15","guid":{"rendered":"https:\/\/fwq.ai\/blog\/31409\/"},"modified":"2024-11-25T12:29:15","modified_gmt":"2024-11-25T04:29:15","slug":"php%e5%ae%9e%e7%8e%b0%e5%be%ae%e4%bf%a1%e6%89%ab%e7%a0%81%e6%94%af%e4%bb%98%e5%8a%9f%e8%83%bd","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/31409\/","title":{"rendered":"PHP\u5b9e\u73b0\u5fae\u4fe1\u626b\u7801\u652f\u4ed8\u529f\u80fd"},"content":{"rendered":"<p><span style=\"font-size: 14px\">\u672c\u6587\u4e3b\u8981\u548c\u5927\u5bb6\u5206\u4eabphp\u5b9e\u73b0\u5fae\u4fe1\u626b\u7801\u652f\u4ed8\u529f\u80fd\u7684\u65b9\u6cd5\uff0c\u5e0c\u671b\u80fd\u5e2e\u52a9\u5230\u5927\u5bb6\u3002<\/span><\/p>\n<p><span style=\"font-size: 14px\">\u5728\u624b\u673a\u5fae\u4fe1\u7aef\u8fdb\u884c\u5fae\u4fe1\u652f\u4ed8\uff0c\u76f4\u63a5\u8c03\u8d77JSAPI\u652f\u4ed8\uff0c\u8fd9\u53ef\u4ee5\u5b9e\u73b0\u5728\u5fae\u4fe1\u91cc\u8fb9\u7684\u5f00\u7684\u9875\u9762\u8fdb\u884c\u652f\u4ed8\uff0c\u6bd4\u5982\u5fae\u5546\u57ce\uff0c\u5fae\u4fe1\u7aefJSAPI\u652f\u4ed8\u8be6\u89c1\uff1aPHP\u5b9e\u73b0\u5fae\u4fe1\u652f\u4ed8(jsapi\u652f\u4ed8)\u548c\u9000\u6b3e(\u65e0\u9700\u96c6\u6210\u652f\u4ed8SDK)\uff1b\u4f46\u6709\u65f6\u5019\u5546\u57ce\u8fd8\u6709PC\u7aef\uff0c\u9700\u8981\u5728PC\u7aef\u4f7f\u7528\u5fae\u4fe1\u652f\u4ed8\uff0c\u5219\u9700\u8981PC\u7aef\u751f\u6210\u652f\u4ed8\u4e8c\u7ef4\u7801\uff0c\u7136\u540e\u5fae\u4fe1\u626b\u7801\u5b8c\u6210\u652f\u4ed8\u3002\u4f8b\u5982\uff1a<br \/><\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/054\/025\/e201f24374d502fb0734ce721ab3dfac-0.png\" class=\"aligncenter\" title=\"PHP\u5b9e\u73b0\u5fae\u4fe1\u626b\u7801\u652f\u4ed8\u529f\u80fd\u63d2\u56fe\" alt=\"PHP\u5b9e\u73b0\u5fae\u4fe1\u626b\u7801\u652f\u4ed8\u529f\u80fd\u63d2\u56fe\" \/><\/p>\n<p><span style=\"font-size: 14px\">\u8fd9\u91cc\u4e3b\u8981\u8bb2\u4e00\u4e0bPC\u7aef\u626b\u7801\u652f\u4ed8\u4ee5\u53ca\u9000\u6b3e\u7684\u5177\u4f53\u5b9e\u73b0\uff1a<\/span><\/p>\n<pre>&lt;span style=\"font-size: 14px;\"&gt;\/**&lt;br&gt; * \u5fae\u4fe1\u652f\u4ed8\u8bf7\u6c42\u63a5\u53e3(POST)&lt;br&gt; * @param string $goods_id \t\u5546\u54c1ID&lt;br&gt; * @param string $body \t\t\u5546\u54c1\u7b80\u5355\u63cf\u8ff0&lt;br&gt; * @param string $order_sn &nbsp;\u8ba2\u5355\u7f16\u53f7&lt;br&gt; * @param string $total_fee \u91d1\u989d&lt;br&gt; * @return &nbsp;json\u7684\u6570\u636e&lt;br&gt; *\/&lt;br&gt;public function wxpay($goods_id,$total_fee,$body,$order_sn){&lt;br&gt;\t$config = $this-&amp;gt;config;&lt;br&gt;&lt;br&gt;\t\/\/\u7edf\u4e00\u4e0b\u5355\u53c2\u6570\u6784\u9020&lt;br&gt;\t$unifiedorder = array(&lt;br&gt;\t\t'appid'\t\t\t=&amp;gt; $config['appid'],&lt;br&gt;\t\t'mch_id'\t\t=&amp;gt; $config['mch_id'],&lt;br&gt;\t\t'device_info'\t=&amp;gt; 'WEB',&lt;br&gt;\t\t'nonce_str'\t\t=&amp;gt; self::getNonceStr(),&lt;br&gt;\t\t'body'\t\t\t=&amp;gt; $body,&lt;br&gt;\t\t'out_trade_no'\t=&amp;gt; $order_sn,&lt;br&gt;\t\t'total_fee'\t\t=&amp;gt; $total_fee * 100,&lt;br&gt;\t\t'spbill_create_ip'\t=&amp;gt; self::getip(),&lt;br&gt;\t\t'notify_url'\t=&amp;gt; 'http:\/\/'.$_SERVER['HTTP_HOST'].'\/notify.php',&lt;br&gt;\t\t'trade_type'\t=&amp;gt; 'NATIVE',&lt;br&gt;\t\t'product_id'\t=&amp;gt; $goods_id&lt;br&gt;\t);&lt;br&gt;\t$unifiedorder['sign'] = self::makeSign($unifiedorder);&lt;br&gt;&lt;br&gt;\t\/\/return $unifiedorder;&lt;br&gt;&lt;br&gt;\t\/\/\u8bf7\u6c42\u6570\u636e,\u7edf\u4e00\u4e0b\u5355&lt;br&gt;\t$xmldata = self::array2xml($unifiedorder);&lt;br&gt;\t$url = 'https:\/\/api.mch.weixin.qq.com\/pay\/unifiedorder';&lt;br&gt;\t$res = self::curl_post_ssl($url, $xmldata);&lt;br&gt;\tif(!$res){&lt;br&gt;\t\treturn array('status'=&amp;gt;0, 'msg'=&amp;gt;\"Can't connect the server\" );&lt;br&gt;\t}&lt;br&gt;\t\/\/ \u8fd9\u53e5file_put_contents\u662f\u7528\u6765\u67e5\u770b\u670d\u52a1\u5668\u8fd4\u56de\u7684\u7ed3\u679c \u6d4b\u8bd5\u5b8c\u53ef\u4ee5\u5220\u9664\u4e86&lt;br&gt;\tfile_put_contents('.\/log.txt',$res,FILE_APPEND);&lt;br&gt;&lt;br&gt;\t$content = self::xml2array($res);&lt;br&gt;\tif(strval($content['result_code']) == 'FAIL'){&lt;br&gt;\t\treturn array('status'=&amp;gt;0, 'msg'=&amp;gt;strval($content['err_code']).':'.strval($content['err_code_des']));&lt;br&gt;\t}&lt;br&gt;\tif(strval($content['return_code']) == 'FAIL'){&lt;br&gt;\t\treturn array('status'=&amp;gt;0, 'msg'=&amp;gt;strval($content['return_msg']));&lt;br&gt;\t}&lt;br&gt;&lt;br&gt;\treturn $content;&lt;br&gt;}&lt;br&gt;&lt;br&gt;\/**&lt;br&gt; * \u5fae\u4fe1\u9000\u6b3e(POST)&lt;br&gt; * @param string(28) $transaction_id \t\u5728\u5fae\u4fe1\u652f\u4ed8\u7684\u65f6\u5019,\u5fae\u4fe1\u670d\u52a1\u5668\u751f\u6210\u7684\u8ba2\u5355\u6d41\u6c34\u53f7,\u5728\u652f\u4ed8\u901a\u77e5\u4e2d\u6709\u8fd4\u56de&lt;br&gt; * @param string $out_refund_no \t\t\u5546\u54c1\u7b80\u5355\u63cf\u8ff0&lt;br&gt; * @param string $total_fee \t\t\t\u5fae\u4fe1\u652f\u4ed8\u7684\u65f6\u5019\u652f\u4ed8\u7684\u603b\u91d1\u989d(\u5355\u4f4d:\u5206)&lt;br&gt; * @param string $refund_fee \t\t\t\u6b64\u6b21\u8981\u9000\u6b3e\u91d1\u989d(\u5355\u4f4d:\u5206)&lt;br&gt; * @return string\t\t\t\t\t\txml\u683c\u5f0f\u7684\u6570\u636e&lt;br&gt; *\/&lt;br&gt;public function refund($transaction_id,$out_refund_no,$total_fee,$refund_fee){&lt;br&gt;\t$config = $this-&amp;gt;config;&lt;br&gt;&lt;br&gt;\t\/\/\u9000\u6b3e\u53c2\u6570&lt;br&gt;\t$refundorder = array(&lt;br&gt;\t\t'appid'\t\t\t=&amp;gt; $config['appid'],&lt;br&gt;\t\t'mch_id'\t\t=&amp;gt; $config['mch_id'],&lt;br&gt;\t\t'nonce_str'\t\t=&amp;gt; self::getNonceStr(),&lt;br&gt;\t\t'transaction_id'=&amp;gt; $transaction_id,&lt;br&gt;\t\t'out_refund_no'\t=&amp;gt; $out_refund_no,&lt;br&gt;\t\t'total_fee'\t\t=&amp;gt; $total_fee * 100,&lt;br&gt;\t\t'refund_fee'\t=&amp;gt; $refund_fee * 100&lt;br&gt;\t);&lt;br&gt;\t$refundorder['sign'] = self::makeSign($refundorder);&lt;br&gt;&lt;br&gt;\t\/\/\u8bf7\u6c42\u6570\u636e,\u8fdb\u884c\u9000\u6b3e&lt;br&gt;\t$xmldata = self::array2xml($refundorder);&lt;br&gt;\t$url = 'https:\/\/api.mch.weixin.qq.com\/secapi\/pay\/refund';&lt;br&gt;\t$res = self::curl_post_ssl($url, $xmldata);&lt;br&gt;\tif(!$res){&lt;br&gt;\t\treturn array('status'=&amp;gt;0, 'msg'=&amp;gt;\"Can't connect the server\" );&lt;br&gt;\t}&lt;br&gt;\t\/\/ \u8fd9\u53e5file_put_contents\u662f\u7528\u6765\u67e5\u770b\u670d\u52a1\u5668\u8fd4\u56de\u7684\u7ed3\u679c \u6d4b\u8bd5\u5b8c\u53ef\u4ee5\u5220\u9664\u4e86&lt;br&gt;\t\/\/file_put_contents('.\/log3.txt',$res,FILE_APPEND);&lt;br&gt;&lt;br&gt;\t$content = self::xml2array($res);&lt;br&gt;\tif(strval($content['result_code']) == 'FAIL'){&lt;br&gt;\t\treturn array('status'=&amp;gt;0, 'msg'=&amp;gt;strval($content['err_code']).':'.strval($content['err_code_des']));&lt;br&gt;\t}&lt;br&gt;\tif(strval($content['return_code']) == 'FAIL'){&lt;br&gt;\t\treturn array('status'=&amp;gt;0, 'msg'=&amp;gt;strval($content['return_msg']));&lt;br&gt;\t}&lt;br&gt;&lt;br&gt;\treturn $content;&lt;br&gt;}&lt;br&gt;&lt;\/span&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><span style=\"font-size: 14px\">\u652f\u4ed8\u548c\u9000\u6b3e\u5c31\u662f\u8fd9\u4e48\u7b80\u5355\uff0c\u800c\u4e14\u652f\u4ed8\u7684\u65f6\u5019\u65e0\u9700\u83b7\u53d6\u7528\u6237openid\uff0c\u65e0\u9700\u8bc1\u4e66\u6587\u4ef6\uff0c\u65e0\u9700\u914d\u7f6e\u652f\u4ed8\u6388\u6743\u76ee\u5f55\uff0c\u8fd9\u662f\u5c01\u88c5\u8fc7\u7684\u652f\u4ed8\u7c7b\u6587\u4ef6\u7684\u5b9e\u73b0\uff0c\u8c03\u7528\u65b9\u6cd5\u66f4\u7b80\u5355\uff1a<\/span><\/p>\n<p><span>\u7acb\u5373\u5b66\u4e60<\/span>\u201c\u201d\uff1b<\/p>\n<pre>&lt;span style=\"font-size: 14px;\"&gt;require_once \"webwxpay.class.php\";&lt;br&gt;&lt;br&gt;$config = array(&lt;br&gt;\t'appid'\t\t\t=&amp;gt; 'wx123456789876',&lt;br&gt;\t'mch_id'\t \t=&amp;gt; '123456789',&lt;br&gt;\t'pay_apikey' \t=&amp;gt; '123456789876123456789876123456789876'&lt;br&gt;);&lt;br&gt;&lt;br&gt;$wxpay = new WxPay($config);&lt;br&gt;$result = $wxpay-&amp;gt;paytest();&lt;br&gt;\/\/print_r($result);&lt;br&gt;scerweima($result['code_url']);\t\t\/\/\u751f\u6210\u7684\u652f\u4ed8\u4e8c\u7ef4\u7801,\u7528\u6237\u53ef\u4ee5\u626b\u7801\u4ed8\u6b3e&lt;br&gt;&lt;\/span&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><span style=\"font-size: 14px\">\u8fd9\u65f6\u5019\u5c31\u4f1a\u751f\u6210\u652f\u4ed8\u4e8c\u7ef4\u7801\uff0c\u7136\u540e\u5fae\u4fe1\u626b\u4e00\u626b\u5c31\u53ef\u4ee5\u5b8c\u6210\u652f\u4ed8\uff1a<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/054\/025\/e201f24374d502fb0734ce721ab3dfac-1.png\" class=\"aligncenter\" title=\"PHP\u5b9e\u73b0\u5fae\u4fe1\u626b\u7801\u652f\u4ed8\u529f\u80fd\u63d2\u56fe1\" alt=\"PHP\u5b9e\u73b0\u5fae\u4fe1\u626b\u7801\u652f\u4ed8\u529f\u80fd\u63d2\u56fe1\" \/><\/p>\n<p><span style=\"font-size: 14px\">\u81f3\u4e8e\u652f\u4ed8\u56de\u8c03\u9a8c\u8bc1\uff0c\u8fd9\u91cc\u5c31\u4e0d\u8fc7\u591a\u8bb2\u4e86\uff0c\u4e0d\u660e\u767d\u7684\u53ef\u4ee5\u770bThinkPHP\u4e2d\u5b9e\u73b0\u5fae\u4fe1\u652f\u4ed8(jsapi\u652f\u4ed8)\u6d41\u7a0b\uff0c\u8fd9\u91cc\u8be6\u7ec6\u8bb2\u4e86\u5982\u4f55\u5904\u7406\u56de\u8c03\u3002<\/span><\/p>\n<p>\u76f8\u5173\u63a8\u8350\uff1a<\/p>\n<\/p>\n<\/p>\n<p>\u4ee5\u4e0a\u5c31\u662fPHP\u5b9e\u73b0\u5fae\u4fe1\u626b\u7801\u652f\u4ed8\u529f\u80fd\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>\u672c\u6587\u4e3b\u8981\u548c\u5927\u5bb6\u5206\u4eabphp\u5b9e\u73b0\u5fae\u4fe1\u626b\u7801\u652f\u4ed8\u529f\u80fd\u7684\u65b9\u6cd5\uff0c\u5e0c\u671b\u80fd\u5e2e\u52a9\u5230\u5927\u5bb6\u3002 \u5728\u624b\u673a\u5fae\u4fe1\u7aef\u8fdb\u884c\u5fae\u4fe1\u652f\u4ed8\uff0c\u76f4\u63a5\u8c03\u8d77JSAPI\u652f\u4ed8\uff0c\u8fd9\u53ef\u4ee5\u5b9e\u73b0\u5728\u5fae\u4fe1\u91cc\u8fb9\u7684\u5f00\u7684\u9875\u9762\u8fdb\u884c\u652f\u4ed8\uff0c\u6bd4\u5982\u5fae\u5546\u57ce\uff0c\u5fae\u4fe1\u7aefJSAPI\u652f\u4ed8\u8be6\u89c1\uff1aPHP\u5b9e\u73b0\u5fae\u4fe1\u652f\u4ed8(jsapi\u652f\u4ed8)\u548c\u9000\u6b3e(\u65e0\u9700\u96c6\u6210\u652f\u4ed8SDK)\uff1b\u4f46\u6709\u65f6\u5019\u5546\u57ce\u8fd8\u6709PC\u7aef\uff0c\u9700\u8981\u5728PC\u7aef\u4f7f\u7528\u5fae\u4fe1\u652f\u4ed8\uff0c\u5219\u9700\u8981PC\u7aef\u751f\u6210\u652f\u4ed8\u4e8c\u7ef4\u7801\uff0c\u7136\u540e\u5fae\u4fe1\u626b\u7801\u5b8c\u6210\u652f\u4ed8\u3002\u4f8b\u5982\uff1a \u8fd9\u91cc\u4e3b\u8981\u8bb2\u4e00\u4e0bPC\u7aef\u626b\u7801\u652f\u4ed8\u4ee5\u53ca\u9000\u6b3e\u7684\u5177\u4f53\u5b9e\u73b0\uff1a &lt;span style=&#8221;font-size: 14px;&#8221;&gt;\/**&lt;br&gt; * \u5fae\u4fe1\u652f\u4ed8\u8bf7\u6c42\u63a5\u53e3(POST)&lt;br&gt; * @param string $goods_id \u5546\u54c1ID&lt;br&gt; * @param string $body \u5546\u54c1\u7b80\u5355\u63cf\u8ff0&lt;br&gt; * @param string $order_sn &nbsp;\u8ba2\u5355\u7f16\u53f7&lt;br&gt; * @param string $total_fee \u91d1\u989d&lt;br&gt; * @return &nbsp;json\u7684\u6570\u636e&lt;br&gt; *\/&lt;br&gt;public function wxpay($goods_id,$total_fee,$body,$order_sn){&lt;br&gt; $config = $this-&amp;gt;config;&lt;br&gt;&lt;br&gt; \/\/\u7edf\u4e00\u4e0b\u5355\u53c2\u6570\u6784\u9020&lt;br&gt; $unifiedorder = array(&lt;br&gt; &#8216;appid&#8217; =&amp;gt; $config[&#8216;appid&#8217;],&lt;br&gt; &#8216;mch_id&#8217; =&amp;gt; $config[&#8216;mch_id&#8217;],&lt;br&gt; &#8216;device_info&#8217; =&amp;gt; &#8216;WEB&#8217;,&lt;br&gt; &#8216;nonce_str&#8217; =&amp;gt; self::getNonceStr(),&lt;br&gt; &#8216;body&#8217; =&amp;gt; [&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-31409","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/31409","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=31409"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/31409\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=31409"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=31409"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=31409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}