WeChat development enterprise payment PHP code implementation
Mar 06, 2017 am 09:22 AMThe purpose of writing this article is mainly because the SDK provided by the WeChat public platform does not provide an SDK implementation of this function.
In fact, the final implementation still relies on the WeChat public platform development documentation and SDK.
Application scenarios of enterprise payment: Official account pays users who have followed it, such as processing refunds, financial settlements, etc.
Let me talk about the implementation idea first:
Automatically install it in the SDK Extend the WxMchPay component based on the class library to realize the expansion of enterprise payment functions.
Without further ado, let’s get to the code. The following is the component that inherits the SDK to implement enterprise payment:
$parameters parameter reference: Enterprise payment API document
<?php // 引入SDK import('Common.Util.WxPay'); /** * 微信企業(yè)付款操作類 * Author : Max.wen * DateTime: <15/9/16 11:00> */ class WxMchPay extends Wxpay_client_pub { /** * API 參數(shù) * @var array * 'mch_appid' # 公眾號(hào)APPID * 'mchid' # 商戶號(hào) * 'device_info' # 設(shè)備號(hào) * 'nonce_str' # 隨機(jī)字符串 * 'partner_trade_no' # 商戶訂單號(hào) * 'openid' # 收款用戶openid * 'check_name' # 校驗(yàn)用戶姓名選項(xiàng) 針對(duì)實(shí)名認(rèn)證的用戶 * 're_user_name' # 收款用戶姓名 * 'amount' # 付款金額 * 'desc' # 企業(yè)付款描述信息 * 'spbill_create_ip' # Ip地址 * 'sign' # 簽名 */ public $parameters = []; public function __construct() { $this->url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT; } /** * 生成請(qǐng)求xml數(shù)據(jù) * @return string */ public function createXml() { $this->parameters['mch_appid'] = WxPayConf_pub::APPID; $this->parameters['mchid'] = WxPayConf_pub::MCHID; $this->parameters['nonce_str'] = $this->createNoncestr(); $this->parameters['sign'] = $this->getSign($this->parameters); return $this->arrayToXml($this->parameters); } /** * 作用:使用證書(shū),以post方式提交xml到對(duì)應(yīng)的接口url */ function postXmlSSLCurl($xml,$url,$second=30) { $ch = curl_init(); //超時(shí)時(shí)間 curl_setopt($ch,CURLOPT_TIMEOUT,$second); //這里設(shè)置代理,如果有的話 //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8'); //curl_setopt($ch,CURLOPT_PROXYPORT, 8080); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); //設(shè)置header curl_setopt($ch,CURLOPT_HEADER,FALSE); //要求結(jié)果為字符串且輸出到屏幕上 curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); //設(shè)置證書(shū) curl_setopt($ch,CURLOPT_CAINFO, WxPayConf_pub::SSLROOTCA_PATH); //使用證書(shū):cert 與 key 分別屬于兩個(gè).pem文件 //默認(rèn)格式為PEM,可以注釋 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT, WxPayConf_pub::SSLCERT_PATH); //默認(rèn)格式為PEM,可以注釋 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY, WxPayConf_pub::SSLKEY_PATH); //post提交方式 curl_setopt($ch,CURLOPT_POST, true); curl_setopt($ch,CURLOPT_POSTFIELDS,$xml); $data = curl_exec($ch); //返回結(jié)果 if($data){ curl_close($ch); return $data; } else { $error = curl_errno($ch); echo "curl出錯(cuò),錯(cuò)誤碼:$error"."<br>"; echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>錯(cuò)誤原因查詢</a></br>"; curl_close($ch); return false; } } }
Controller layer Function implementation:
<?php /** * Author : Max.wen * DateTime: <15/9/20 16:47> */ namespace Home\Controller; class TestController extends CommonController { /** * 企業(yè)付款測(cè)試 */ public function rebate() { import('Common.Util.WxMchPay'); $mchPay = new \WxMchPay(); // 用戶openid $mchPay->setParameter('openid', 'oy2lbszXkgvlEKThrzqEziKEBzqU'); // 商戶訂單號(hào) $mchPay->setParameter('partner_trade_no', 'test-'.time()); // 校驗(yàn)用戶姓名選項(xiàng) $mchPay->setParameter('check_name', 'NO_CHECK'); // 企業(yè)付款金額 單位為分 $mchPay->setParameter('amount', 100); // 企業(yè)付款描述信息 $mchPay->setParameter('desc', '開(kāi)發(fā)測(cè)試'); // 調(diào)用接口的機(jī)器IP地址 自定義 $mchPay->setParameter('spbill_create_ip', '127.0.0.1'); # getClientIp() // 收款用戶姓名 // $mchPay->setParameter('re_user_name', 'Max wen'); // 設(shè)備信息 // $mchPay->setParameter('device_info', 'dev_server'); $response = $mchPay->postXmlSSL(); if( !empty($response) ) { $data = simplexml_load_string($response, null, LIBXML_NOCDATA); echo json_encode($data); }else{ echo json_encode( array('return_code' => 'FAIL', 'return_msg' => 'transfers_接口出錯(cuò)', 'return_ext' => array()) ); } } }
After completing the above two parts of code, you can basically call the enterprise payment API successfully.
Data structure example of returned result:
{ "return_code": "SUCCESS", "return_msg": { }, "mch_appid": "wx519cae424099ed6b", "mchid": "1228636402", "device_info": { }, "nonce_str": "qjupk84q4iqxkb578hb5h2qiatgcwxwg", "result_code": "SUCCESS", "partner_trade_no": "test-1442801966", "payment_no": "1000018301201509210739170397", "payment_time": "2015-09-21 10:19:26" }
Possible problems:
1. CA certificate error
You can see it in WxMchPay , I rewrote the postXmlSSLCurl() method of Wxpay_client_pub in the SDK
Because this method in the SDK by default does not come with a CA certificate when making a CURL POST request.
In comparison, there are many
curl_setopt($ch,CURLOPT_CAINFO, WxPayConf_pub::SSLROOTCA_PATH); Such a line of code.
The function is to attach the CA certificate when requesting.
2. Transfer operations to the same user are too frequent, please try again later.
This error belongs to the limitations of the WeChat server, specific restrictions There is no explanation of the frequency, but after actual testing, it is about 1 minute.
So you need to pay more attention during development.
For more articles related to WeChat development enterprise payment PHP code implementation, please pay attention to the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

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

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

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

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

PHP is an open source scripting language that is widely used in web development and server-side programming, especially in WeChat development. Today, more and more companies and developers are starting to use PHP for WeChat development because it has become a truly easy-to-learn and easy-to-use development language. In WeChat development, message encryption and decryption are a very important issue because they involve data security. For messages without encryption and decryption methods, hackers can easily obtain the data, posing a threat to users.

In the development of WeChat public accounts, the voting function is often used. The voting function is a great way for users to quickly participate in interactions, and it is also an important tool for holding events and surveying opinions. This article will introduce you how to use PHP to implement WeChat voting function. Obtain the authorization of the WeChat official account. First, you need to obtain the authorization of the WeChat official account. On the WeChat public platform, you need to configure the API address of the WeChat public account, the official account, and the token corresponding to the public account. In the process of our development using PHP language, we need to use the PH officially provided by WeChat

With the popularity of WeChat, more and more companies are beginning to use it as a marketing tool. The WeChat group messaging function is one of the important means for enterprises to conduct WeChat marketing. However, if you only rely on manual sending, it is an extremely time-consuming and laborious task for marketers. Therefore, it is particularly important to develop a WeChat mass messaging tool. This article will introduce how to use PHP to develop WeChat mass messaging tools. 1. Preparation work To develop WeChat mass messaging tools, we need to master the following technical points: Basic knowledge of PHP WeChat public platform development Development tools: Sub

WeChat is currently one of the social platforms with the largest user base in the world. With the popularity of mobile Internet, more and more companies are beginning to realize the importance of WeChat marketing. When conducting WeChat marketing, customer service is a crucial part. In order to better manage the customer service chat window, we can use PHP language for WeChat development. 1. Introduction to PHP WeChat development PHP is an open source server-side scripting language that is widely used in the field of Web development. Combined with the development interface provided by WeChat public platform, we can use PHP language to conduct WeChat

In the development of WeChat public accounts, user tag management is a very important function, which allows developers to better understand and manage their users. This article will introduce how to use PHP to implement the WeChat user tag management function. 1. Obtain the openid of the WeChat user. Before using the WeChat user tag management function, we first need to obtain the user's openid. In the development of WeChat public accounts, it is a common practice to obtain openid through user authorization. After the user authorization is completed, we can obtain the user through the following code

As WeChat becomes an increasingly important communication tool in people's lives, its agile messaging function is quickly favored by a large number of enterprises and individuals. For enterprises, developing WeChat into a marketing platform has become a trend, and the importance of WeChat development has gradually become more prominent. Among them, the group sending function is even more widely used. So, as a PHP programmer, how to implement group message sending records? The following will give you a brief introduction. 1. Understand the development knowledge related to WeChat public accounts. Before understanding how to implement group message sending records, I

How to use PHP to develop WeChat public accounts WeChat public accounts have become an important channel for promotion and interaction for many companies, and PHP, as a commonly used Web language, can also be used to develop WeChat public accounts. This article will introduce the specific steps to use PHP to develop WeChat public accounts. Step 1: Obtain the developer account of the WeChat official account. Before starting the development of the WeChat official account, you need to apply for a developer account of the WeChat official account. For the specific registration process, please refer to the official website of WeChat public platform

With the development of the Internet and mobile smart devices, WeChat has become an indispensable part of the social and marketing fields. In this increasingly digital era, how to use PHP for WeChat development has become the focus of many developers. This article mainly introduces the relevant knowledge points on how to use PHP for WeChat development, as well as some of the tips and precautions. 1. Development environment preparation Before developing WeChat, you first need to prepare the corresponding development environment. Specifically, you need to install the PHP operating environment and the WeChat public platform
