Home WeChat Applet Mini Program Development Enterprise payment for small program development

Enterprise payment for small program development

May 09, 2017 am 09:58 AM

The purpose of writing this article is mainly because the SDK provided by the WeChat public platform does not provide an SDK implementation for this function.

In fact, the final implementation was achieved with the help of WeChat Public platform development documents and SDK.

Application scenarios of enterprise payment: Official account pays users who have followed it, such as processing refunds, financial settlements, etc.

Let’s talk about the implementation first Idea:

Expand the WxMchPay component on the basis of the class library that comes with the SDK to realize the expansion of enterprise payment functions.

Without further ado, let’s talk about the code. The following is the component that inherits SDK to implement corporate payment:

$ parameters parameter reference: Documentation of Enterprise PaymentAPI

<?php// 引入SDKimport(&#39;Common.Util.WxPay&#39;);/**
 * 微信企业付款操作类
 * Author  :  Max.wen
 * DateTime: <15/9/16 11:00> */class WxMchPay extends Wxpay_client_pub
{    /**
     * API 参数
     * @var array
     * &#39;mch_appid&#39;         # 公众号APPID
     * &#39;mchid&#39;             # 商户号
     * &#39;device_info&#39;       # 设备号
     * &#39;nonce_str&#39;         # 随机字符串
     * &#39;partner_trade_no&#39;  # 商户订单号
     * &#39;openid&#39;            # 收款用户openid
     * &#39;check_name&#39;        # 校验用户姓名选项 针对实名认证的用户
     * &#39;re_user_name&#39;      # 收款用户姓名
     * &#39;amount&#39;            # 付款金额
     * &#39;desc&#39;              # 企业付款描述信息
     * &#39;spbill_create_ip&#39;  # Ip地址
     * &#39;sign&#39;              # 签名     */
    public $parameters = [];    public function construct()
    {        $this->url = &#39;https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers&#39;;        $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
    }    /**
     * 生成请求xml数据
     * @return string     */
    public function createXml()
    {        $this->parameters[&#39;mch_appid&#39;] = WxPayConf_pub::APPID;        $this->parameters[&#39;mchid&#39;]     = WxPayConf_pub::MCHID;        $this->parameters[&#39;nonce_str&#39;] = $this->createNoncestr();        $this->parameters[&#39;sign&#39;]      = $this->getSign($this->parameters);        return $this->arrayToXml($this->parameters);
    }    /**
     *     作用:使用证书,以post方式提交xml到对应的接口url     */
    function postXmlSSLCurl($xml,$url,$second=30)
    {        $ch = curl_init();        //超时时间
        curl_setopt($ch,CURLOPT_TIMEOUT,$second);        //这里设置代理,如果有的话
        //curl_setopt($ch,CURLOPT_PROXY, &#39;8.8.8.8&#39;);
        //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);        //设置header
        curl_setopt($ch,CURLOPT_HEADER,FALSE);        //要求结果为字符串且输出到屏幕上
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);        //设置证书
        curl_setopt($ch,CURLOPT_CAINFO, WxPayConf_pub::SSLROOTCA_PATH);        //使用证书:cert 与 key 分别属于两个.pem文件
        //默认格式为PEM,可以注释
        curl_setopt($ch,CURLOPT_SSLCERTTYPE,&#39;PEM&#39;);
        curl_setopt($ch,CURLOPT_SSLCERT, WxPayConf_pub::SSLCERT_PATH);        //默认格式为PEM,可以注释
        curl_setopt($ch,CURLOPT_SSLKEYTYPE,&#39;PEM&#39;);
        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);        //返回结果
        if($data){
            curl_close($ch);            return $data;
        }        else {            $error = curl_errno($ch);            echo "curl出错,错误码:$error"."<br>";            echo "<a href=&#39;http://curl.haxx.se/libcurl/c/libcurl-errors.html&#39;>错误原因查询</a></br>";
            curl_close($ch);            return false;
        }
    }


}
Copy after login

Controller layer function implementation:

<?php/**
 * Author  :  Max.wen
 * DateTime: <15/9/20 16:47> */namespace Home\Controller;class TestController extends CommonController
{    /**
     * 企业付款测试     */
    public function rebate()
    {
        import(&#39;Common.Util.WxMchPay&#39;);        $mchPay = new \WxMchPay();        // 用户openid
        $mchPay->setParameter(&#39;openid&#39;, &#39;oy2lbszXkgvlEKThrzqEziKEBzqU&#39;);        // 商户订单号
        $mchPay->setParameter(&#39;partner_trade_no&#39;, &#39;test-&#39;.time());        // 校验用户姓名选项
        $mchPay->setParameter(&#39;check_name&#39;, &#39;NO_CHECK&#39;);        // 企业付款金额  单位为分
        $mchPay->setParameter(&#39;amount&#39;, 100);        // 企业付款描述信息
        $mchPay->setParameter(&#39;desc&#39;, &#39;开发测试&#39;);        // 调用接口的机器IP地址  自定义
        $mchPay->setParameter(&#39;spbill_create_ip&#39;, &#39;127.0.0.1&#39;); # getClientIp()
        // 收款用户姓名
        // $mchPay->setParameter(&#39;re_user_name&#39;, &#39;Max wen&#39;);
        // 设备信息
        // $mchPay->setParameter(&#39;device_info&#39;, &#39;dev_server&#39;);

        $response = $mchPay->postXmlSSL();        if( !empty($response) ) {            $data = simplexml_load_string($response, null, LIBXML_NOCDATA);            echo json_encode($data);
        }else{            echo json_encode( array(&#39;return_code&#39; => &#39;FAIL&#39;, &#39;return_msg&#39; => &#39;transfers_接口出错&#39;, &#39;return_ext&#39; => array()) );
        }
    }
}
Copy after login

Complete the above two parts Code, you can basically call the enterprise payment API successfully.

Example of data structure 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"
}
Copy after login

Possible problems:

1. CA certificate error

As you can see in WxMchPay, I rewrote the postXmlSSLCurl() method of Wxpay_client_pub in the SDK

Because By default, this method in the SDK does not include a CA certificate when making a CURL POST request.

In comparison

 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, The transfer operation for the same user is too frequent, please try again later.

This error belongs to WeChat There is no explanation of the server-side restrictions and the specific frequency limit, but after actual testing, it is about 1 minute.

So you need to pay more attention when developing.

【Related recommendations】

1. WeChat public account platform source code download

2. WeChat voting source code free download

The above is the detailed content of Enterprise payment for small program development. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1668
14
PHP Tutorial
1273
29
C# Tutorial
1256
24
PHP permission management and user role setting in mini program development PHP permission management and user role setting in mini program development Jul 04, 2023 pm 04:48 PM

PHP permission management and user role setting in mini program development. With the popularity of mini programs and the expansion of their application scope, users have put forward higher requirements for the functions and security of mini programs. Among them, permission management and user role setting are An important part of ensuring the security of mini programs. Using PHP for permission management and user role setting in mini programs can effectively protect user data and privacy. The following will introduce how to implement this function. 1. Implementation of Permission Management Permission management refers to granting different operating permissions based on the user's identity and role. in small

PHP page jump and routing management in mini program development PHP page jump and routing management in mini program development Jul 04, 2023 pm 01:15 PM

PHP's page jump and routing management in mini program development With the rapid development of mini programs, more and more developers are beginning to combine PHP with mini program development. In the development of small programs, page jump and routing management are very important parts, which can help developers achieve switching and navigation operations between pages. As a commonly used server-side programming language, PHP can interact well with mini programs and transfer data. Let’s take a detailed look at PHP’s page jump and routing management in mini programs. 1. Page jump base

PHP security protection and attack prevention in mini program development PHP security protection and attack prevention in mini program development Jul 07, 2023 am 08:55 AM

PHP security protection and attack prevention in mini program development With the rapid development of the mobile Internet, mini programs have become an important part of people's lives. As a powerful and flexible back-end development language, PHP is also widely used in the development of small programs. However, security issues have always been an aspect that needs attention in program development. This article will focus on PHP security protection and attack prevention in small program development, and provide some code examples. XSS (Cross-site Scripting Attack) Prevention XSS attack refers to hackers injecting malicious scripts into web pages

How to implement small program development and publishing in uniapp How to implement small program development and publishing in uniapp Oct 20, 2023 am 11:33 AM

How to develop and publish mini programs in uni-app With the development of mobile Internet, mini programs have become an important direction in mobile application development. As a cross-platform development framework, uni-app can support the development of multiple small program platforms at the same time, such as WeChat, Alipay, Baidu, etc. The following will introduce in detail how to use uni-app to develop and publish small programs, and provide some specific code examples. 1. Preparation before developing small programs. Before starting to use uni-app to develop small programs, you need to do some preparations.

Implementation method of drop-down menu developed in PHP in WeChat applet Implementation method of drop-down menu developed in PHP in WeChat applet Jun 04, 2023 am 10:31 AM

Today we will learn how to implement the drop-down menu developed in PHP in the WeChat applet. WeChat mini program is a lightweight application that users can use directly in WeChat without downloading and installing, which is very convenient. PHP is a very popular back-end programming language and a language that works well with WeChat mini programs. Let's take a look at how to use PHP to develop drop-down menus in WeChat mini programs. First, we need to prepare the development environment, including PHP, WeChat applet development tools and servers. then we

PHP data caching and caching strategies in small program development PHP data caching and caching strategies in small program development Jul 05, 2023 pm 02:57 PM

PHP data caching and caching strategies in mini program development With the rapid development of mini programs, more developers are beginning to pay attention to how to improve the performance and response speed of mini programs. One of the important optimization methods is to use data caching to reduce frequent access to the database and external interfaces. In PHP, we can use various caching strategies to implement data caching. This article will introduce the principles of data caching in PHP and provide sample codes for several common caching strategies. 1. Data caching principle Data caching refers to storing data in memory to

PHP page animation effects and interaction design in mini program development PHP page animation effects and interaction design in mini program development Jul 04, 2023 pm 11:01 PM

Introduction to PHP page animation effects and interaction design in mini program development: A mini program is an application that runs on a mobile device and can provide an experience similar to native applications. In the development of mini programs, PHP, as a commonly used back-end language, can add animation effects and interactive design to mini program pages. This article will introduce some commonly used PHP page animation effects and interaction designs, and attach code examples. 1. CSS3 animation CSS3 provides a wealth of properties and methods for achieving various animation effects. And in small

UniApp implements analysis of the development and launch process of ByteDance mini-programs UniApp implements analysis of the development and launch process of ByteDance mini-programs Jul 06, 2023 pm 05:01 PM

Analysis of the development and launch process of ByteDance applets implemented by UniApp. As an emerging mobile application development method, ByteDance applets are gradually becoming popular in the industry. Before developing the Bytedance mini program, we need to understand how to use UniApp to implement the development and launch process. 1. Introduction to UniApp UniApp is a framework developed based on Vue.js that uses HTML5, App, and small programs as the unified development framework for multiple terminals. By writing a set of code, it can run on multiple platforms at the same time, including fonts.

See all articles