php method to implement WeChat payment: 1. Download the official demo; 2. Modify the curl network request configuration code; 3. Complete the basic information settings; 4. Modify the WxPay.Notify.php file; 5. Set up the public account backend; 6. Complete the payment process.
The operating environment of this article: Windows 7 system, PHP version 7.1, DELL G3 computer
How does php implement WeChat payment?
PHP implements WeChat payment (jsapi payment) process
I recently came into contact with a project involving WeChat payment. I have been developing WeChat for so long. , I haven’t done payment yet, and I have used public accounts to send red envelopes before. Thanks to the seniors for their exploration, I read their blog posts, which saved me a lot of detours.
Early preparation:
1. WeChat authentication service account, and activated WeChat payment
2. WeChat payment SDK, download address:
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
3. Log in to the WeChat payment platform
https://pay.weixin.qq.com/index.php/account/api_certDownload payment certificate
Method steps:
1.Demo file processing
(1) Download the official demo Next, the file name is WxpayAPI_php_v3. Rename this file to wxpay for the convenience of writing the directory later;
(2) Open the WxPay.Api.php file under the lib folder, and there is A section of curl network request configuration code:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
is replaced with:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
in order to disable cURL from verifying the peer's certificate.
(3) Open the WxPay.Config.php file under the lib folder. Starting from line 25, complete the basic information settings according to your account;
const APPID = '公众账号APPID'; const MCHID = '商户号'; const KEY = '商户支付密钥'; const APPSECRET = '公众帐号secert';
(4) Open the lib folder WxPay.Notify.php file under, the code in line 79:
if($needSign == true && $this->GetReturn_code($return_code) == "SUCCESS") { $this->SetSign(); }
is changed to:
if($needSign == true && $this->GetReturn_code() == "SUCCESS") { $this->SetSign(); }
(5) Open the cert certificate directory and replace the two certificates inside with your own Payment certificate.
2. Public account background settings
(1) Configure the web page authorized domain name, my domain name is (xy.chuyin.ren);
(1) Configure the payment authorization directory. The domain name is (xy.chuyin.ren). I put the demo in the weixinopen/ folder of the directory pointed to by this domain name. The jsapi.php file in the demo It is located in the example/ directory, so the payment authorization directory is: xy.chuyin.ren/weixinopen/wxpay/example/
3. Payment process
Open The jsapi.php file in the example directory, payment initiation and processing, are all completed here.
(1) Obtain user openid
I have configured my APPID and APPSecert before, so there is no need to process it here.
//①、获取用户openid $tools = new JsApiPay(); $openId = $tools->GetOpenid();
The JsApiPay() class initialized here first gets an object. The file corresponds to WxPay.JsApiPay.php in the example/ directory. Calling the GetOpenid() method will automatically obtain its own openID.
(2) Unified order
//②、统一下单 $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://paysdk.weixin.qq.com/example/notify.php"); $input->SetTrade_type("JSAPI"); $input->SetOpenid($openId); $order = WxPayApi::unifiedOrder($input); echo '<font color="#f00"><b>统一下单支付单信息</b></font><br/>'; printf_info($order); $jsApiParameters = $tools->GetJsApiParameters($order);
Corresponds to the unifiedOrder() method on line 24 of WxPay.Api.php, which configures the order information and payment callback function. Several parameters need to be modified here:
A. Product name:
$input->SetBody("test");
B. Order number
$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
C. Payment amount
$input->SetTotal_fee(" 1");
D. The payment verification link
is set to the location of your notify.php file, so I set it here to: http://xy.chuyin. ren/weixinopen/wxpay/example/notify.php
You can also write other addresses. Of course, it must be under the payment authorization domain name. After the payment is successful, it will automatically call back to the method specified in the link. You can Perform judgment and database operations.
$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
E. Additional parameters
$input->SetAttach("test");
Additional parameters can be filled in or not. If filled in, it is best not to have spaces in the string.
At this time, you should be able to pay successfully by clicking Pay.
(3) Initiate payment
<script type="text/javascript"> //调用微信JS api 支付 function jsApiCall() { WeixinJSBridge.invoke( 'getBrandWCPayRequest', <?php echo $jsApiParameters; ?>, function(res){ WeixinJSBridge.log(res.err_msg); alert(res.err_code+res.err_desc+res.err_msg); } ); } function callpay() { if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', jsApiCall, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall); } }else{ jsApiCall(); } } </script>
Clicking the Pay Now button calls the callpay() function, which will call the jsApiCall() function to open the payment program.
jsApiCall() function will monitor every step of the action:
通过前端jsApiCall()函数可以监听支付结果,但是这个并不可信。确认是否支付成功还是应当通过notify.php 处理业务逻辑。前边配置好了支付验证链接SetNotify_url(),支付完成后,微信服务器会根据链接自动请求你的notify.php文件,打开这个文件,其实这个文件最主要的代码就两行:
$notify = new PayNotifyCallBack(); $notify->Handle(false);
由此跟踪到WxPay.Notify.php类文件的Handle()函数:
/** * * 回调入口 * @param bool $needSign 是否需要签名输出 */ final public function Handle($needSign = true) { $msg = "OK"; //当返回false的时候,表示notify中调用NotifyCallBack回调失败获取签名校验失败,此时直接回复失败 $result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg); if($result == false){ $this->SetReturn_code("FAIL"); $this->SetReturn_msg($msg); $this->ReplyNotify(false); return; } else { //该分支在成功回调到NotifyCallBack方法,处理完成之后流程 $this->SetReturn_code("SUCCESS"); $this->SetReturn_msg("OK"); } $this->ReplyNotify($needSign); }
主要代码:
$result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg);
然后来到WxPay.Api.php文件的第411行,notify()函数:
/** * * 支付结果通用通知 * @param function $callback * 直接回调函数使用方法: notify(you_function); * 回调类成员函数方法:notify(array($this, you_function)); * $callback 原型为:function function_name($data){} */ public static function notify($callback, &$msg) { //获取通知的数据 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; //file_put_contents('log.txt',$xml,FILE_APPEND); //如果返回成功则验证签名 try { $result = WxPayResults::Init($xml); } catch (WxPayException $e){ $msg = $e->errorMessage(); return false; } return call_user_func($callback, $result); }
这里面的$xml=$GLOBALS['HTTP_RAW_POST_DATA'],就是支付成功后用户返回给你的一个结果,他是一个xml格式的字符串。
我们可以将这里返回的xml数据记录下来,然后打开看看$out_trade_no就是在支付之前我自己设置的订单号码,$attach就是设置的附加参数。
得到了这个订单号,然后我就直接在下面写支付成功后的逻辑了,比如改变数据库中的数据等等。
这样 微信支付的 JsApi支付就大致分析完成了。【推荐学习:《PHP视频教程》】
这是集成了官方的SDK实现的,如果不使用SDK,可以使用更简单的方法,见:PHP实现微信支付(jsapi支付)和退款(无需集成支付SDK)
The above is the detailed content of How to implement WeChat payment in php. For more information, please follow other related articles on the PHP Chinese website!

The article compares ACID and BASE database models, detailing their characteristics and appropriate use cases. ACID prioritizes data integrity and consistency, suitable for financial and e-commerce applications, while BASE focuses on availability and

The article discusses securing PHP file uploads to prevent vulnerabilities like code injection. It focuses on file type validation, secure storage, and error handling to enhance application security.

Article discusses best practices for PHP input validation to enhance security, focusing on techniques like using built-in functions, whitelist approach, and server-side validation.

The article discusses strategies for implementing API rate limiting in PHP, including algorithms like Token Bucket and Leaky Bucket, and using libraries like symfony/rate-limiter. It also covers monitoring, dynamically adjusting rate limits, and hand

The article discusses the benefits of using password_hash and password_verify in PHP for securing passwords. The main argument is that these functions enhance password protection through automatic salt generation, strong hashing algorithms, and secur

The article discusses OWASP Top 10 vulnerabilities in PHP and mitigation strategies. Key issues include injection, broken authentication, and XSS, with recommended tools for monitoring and securing PHP applications.

The article discusses strategies to prevent XSS attacks in PHP, focusing on input sanitization, output encoding, and using security-enhancing libraries and frameworks.

The article discusses the use of interfaces and abstract classes in PHP, focusing on when to use each. Interfaces define a contract without implementation, suitable for unrelated classes and multiple inheritance. Abstract classes provide common funct


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

WebStorm Mac version
Useful JavaScript development tools

Atom editor mac version download
The most popular open source editor

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software