Simple utility and class library for generating php classes from a wsdl file.

Overview

wsdl2phpgenerator

Latest Stable Version Build Status Code Coverage Scrutinizer Quality Score Dependency Status

Simple WSDL to PHP classes converter. Takes a WSDL file and outputs class files ready to use.

Uses the MIT license.

Announcement: We are looking to add one or two co-maintainers with commit access to help bring this project forward, review pull requests and respond to issues. If you have contributed to this project or are otherwise actively involved in open source and have a GitHub profile for review, ping @kasperg to express your interest.

New major version: 3

A new major version of wsdl2phpgenerator has recently been released: 3

This introduces changes to both configuration and generated code. The changes makes it more flexible to use, easier to include in other projects, promotes contributions and reduces maintenance.

2.x users are encourage to read a walkthrough of what is new in 3.0.

Installation

Add wsdl2phpgenerator to your project using composer:

composer require wsdl2phpgenerator/wsdl2phpgenerator

Contributors

Originally developed by @walle and includes bug fixes and improvements from various contributors.

Contributing

Pull requests are very welcome. Please read our guidelines for contributing.

Be sure to run the test suite, the fixers and the analyzers

composer test
composer fix
composer analyse

Usage and options

See usage and options for info on the usage of this package.

Versioning

This project uses semantic versioning. The following constitutes the public API:

  • \Wsdl2PhpGenerator\GeneratorInterface
  • \Wsdl2PhpGenerator\ConfigInterface
  • Generated code

Backwards incompatible changes to these means that the major version will be increased. Additional features and bug fixes increase minor and patch versions.

Comments
  • PHP 5.5 & Packagist Support

    PHP 5.5 & Packagist Support

    This works in general, but the unit test fails to generate a class for the currencies. Not sure why yet, not yet had time to look into it. The main issue in PHP 5.5 is they've added their own Generator class

    I also updated composer.json to allow wsdl2phpgenerator to itself be composed into other projects as a dependency.

    opened by chriskl 25
  • PHP 7.2 Support (incomplete)

    PHP 7.2 Support (incomplete)

    Good news, friends! I've finally found some time to upgrade the famous wsdl2phpgenerator page to work with PHP 7.2!

    In order to get thing working, I've had to make a few upgrades:

    • (Requested) upgrade to Symfony Options Resolver v4
    • Upgrade to PhpUnit 6
    • Upgrade php-vcr/phpunit-testlistener-vcr to ~3.0

    We might consider tagging this as a release, since there could be breaking changes. In addition, I've had to make a few other changes:

    • Removing the composer.lock file. That absolutely should be versioned.
    • (not required), but I created a base Wsdl2PhpGenerator abstract test case which extends from TestCase. The old PHPUnit_Framework_TestCase was deprecated.
    • I added a phpunit.xml default file.

    image

    P.S. @pierre-H asked for some changes in #332. These were made in this PR. The other one should be closed.

    Improvement 
    opened by ekeyte 20
  • Add support to php native DateTime

    Add support to php native DateTime

    Add support to automatically convert DateTime objects to string in constructor and setters. Convert string to DateTime in getters. Fix to generate getters/setters also for nullable members

    Improvement 
    opened by lafriks 19
  • addon for inheritance analysing and more (2nd merge trying)

    addon for inheritance analysing and more (2nd merge trying)

    .) add getter/setter generation .) add inheritance in class model .) add simpletype documentation on extended simpleType -- example: xs:simpleType name="StringLength0to256" xs:restriction base="xs:string" xs:minLength value="0"/ xs:maxLength value="256"/ /xs:restriction /xs:simpleType --> string .) add basic class generation .) add enumeration check and documentation generation .) add choice check and documentation generation .) add XSD-files location parameter in generator

    opened by gpalinaut 17
  • Improve comments generation

    Improve comments generation

    • Avoid empty comments and unnecessary new line after description
    • Add chained style to PhpDocComment setters and use em
    • Test empty comments and excessive newlines not generated in comments
    opened by garex 16
  • Separate schema parsing

    Separate schema parsing

    One of the WSDL services I use is a bit unorthodox in the sense where they return <xs:schema> elements as a piece of their responses when you call methods.

    When generated with wsdl2phpgenerator, the field is simply a string that accepts XML data. This XML structure is defined by the schema they return as part of the response (as mentioned above).

    I'm looking for a way to go from these schema elements to generated classes. I am digging through the wsdl2phpgenerator code to see how this is done; perhaps with some guidance I could submit a pull-request with changes that make this easier for others too.

    opened by RSully 16
  • Replace code generation code with external library

    Replace code generation code with external library

    I think we should consider replacing our custom php generation code with an external library.

    In line with replacing CLI code with Symfony Console (#) This would allow us to build on a well established code base and focus on the primary task of of the project: The actual conversion of WSDLs to PHP code.

    I have considered two libraries:

    • https://github.com/schmittjoh/cg-library
    • https://github.com/zendframework/Component_ZendCode

    I am currently leaning towards using ZendCode.

    Pros:

    Cons:

    • Long dependency chain
    • Small user base

    I would love to hear opinions from others.

    Improvement 
    opened by kasperg 16
  • Make members protected if accessor methods are being used

    Make members protected if accessor methods are being used

    Accessor methods are generally used instead of (not 'in addition to') direct variable access. wsdl2phpgenerator currently creates classes where both the variables and the accessor methods are public, which makes for a redundant and confusing API.

    Well-written classes should only allow getting/setting via one of the two approaches. If a user of wsdl2phpgenerator wishes to use accessor methods, we should make the variables protected so that only accessor methods can be used.

    Improvement 
    opened by colinodell 15
  • Refactored Config and ConfigInterface

    Refactored Config and ConfigInterface

    Note: According to SO it is not possible anymore to change the target branch of a pull-request. I'll just reopen it. The old one can be found here: https://github.com/wsdl2phpgenerator/wsdl2phpgenerator/pull/99.

    • [x] Refactor the Config class and its interface to use OptionsResolver
    • [x] Fix tests
    • [x] Add test for allowedValues and normalizers in the config class.
    • [x] Update documentation.
    • [x] Add doc blocks for the new methods. ~~Sorry, no IDE on my side~~.

    Well. This is a first shot to tackle issue https://github.com/wsdl2phpgenerator/wsdl2phpgenerator/issues/94. This definitely needs review, because after changing the config class and the interface, I just fixed the tests to work again and I must admit that some parts of the code are still a black box to me.

    Improvement 
    opened by sheeep 14
  • Classmap also for generated Classes

    Classmap also for generated Classes

    Hi,

    I am currently working on a Project where I had to generate a HTML-form based on a class in the WSDL. I looked into generating the form from the XSD/WSDL but it was a major pain. So I ended up adding a $classMap attribute to the generated classes (just complexTypes). So now I recursively go trough the class(attributes) which I want to represent in the form and generate HTML-elements by type (of the attributes). Does anyone has an idea how to do it more ... elegantly?

    opened by garyee 13
  • Methods that return a single result are returned as ResultType object instead of ResultArrayType

    Methods that return a single result are returned as ResultType object instead of ResultArrayType

    We have an API that returns email recipients via the getRecipients() SOAP method.

    The method returns the following field:

    recipients - unbounded;  type RecipientType
    This datatype represents a recipient.
    

    If there is more than one recipient, we get back a RecipientArrayType. (Expected) However, if there is only one Recipient, we get back an RecipientType. (Not expected.)

    Example:

    Many recipients:

    $recipients = $api->getRecipients();
    echo gettype($recipients->recipient); //RecipientArrayType
    

    One recipient:

    $recipients = $api->getRecipients();
    echo gettype($recipients->recipient); //RecipientType
    

    The issue is that we now have to each time check the object type and perform two separate loops. I would want the getRecipients() method to always return a RecipientArray, independent on how many results there are.

    I'm not completely sure if this is an issue with this project or the SOAP API we are using, hopefully someone can point me in the right direction.

    Bug 
    opened by khromov 11
  • Feature: Missing toArray method in response object Classes

    Feature: Missing toArray method in response object Classes

    In 3.0.0 / 2014-11-25 version the createAccessors configuration option was removed, but members are protected by default?

    • Remove createAccessors configuration option.
    • Members are protected if accessor methods are being used

    How can one generate public members instead of protected? Protected members create a problem when using (array)ObjectClass for-example with Laravels ->toJson(); If generated object classes would have toArray() method, this would not be a problem.

    opened by jarkko-hautakorpi 1
  • In php8 the count() function throws type error if called with null

    In php8 the count() function throws type error if called with null

    In PHP 8 the below error is being thrown because in php8 the count() function throws type error if called with null PHP Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in .../vendor/wsdl2phpgenerator/wsdl2phpgenerator/lib/PhpSource/PhpClass.php:156

    If you go to the source file you will find the below code: if (count($this->implements) > 0) {

    opened by arafatazam 2
  • $obj->getLastError() blocks apache

    $obj->getLastError() blocks apache

    Hi, i'm try to handle the error, I need more details and I tried to call getLastError() method. The methods freeze the excecution and I had to kill apache. I have tried to log a var_dump, print_r of getLastError response, but all methods fails and cause apache freezing like an endless loop. Any idea about this issue? Can it be related to my WSDL?

    opened by tobiascapin 0
  • group element in wsdl

    group element in wsdl

    I generated this WSDL by package https://developer.sabre.com/sites/default/files/resources/9229/BargainFinderMaxRQ_v6-4-0_Design.xml but I have a problem with classes generated from group tag. Like this example: <xs:group name="OriginDestinationInformationTPA_ExtensionsGroup"> <xs:sequence> <xs:element name="DateFlexibility" minOccurs="0" maxOccurs="2"> <xs:annotation> <xs:documentation>The number of alternate days around the travel date to search.</xs:documentation> </xs:annotation> <xs:complexType> <xs:attribute name="NbrOfDays" type="xs:int" use="optional"> <xs:annotation> <xs:documentation>Number of alternate dates before and after requested travel date.</xs:documentation> </xs:annotation> </xs:attribute> <xs:attribute name="Plus" type="xs:int" use="optional"> <xs:annotation> <xs:documentation>Number of alternate dates before requested travel date.</xs:documentation> </xs:annotation> </xs:attribute> <xs:attribute name="Minus" type="xs:int" use="optional"> <xs:annotation> <xs:documentation>Number of alternate dates after requested travel date.</xs:documentation> </xs:annotation> </xs:attribute> <xs:attribute name="Validate" type="xs:boolean" use="optional"> <xs:annotation> <xs:documentation>Flag telling if dates within the specified range should be processed in the validate path.</xs:documentation> </xs:annotation> </xs:attribute> <xs:attribute name="Tolerance" type="xs:boolean" use="optional"> <xs:annotation> <xs:documentation>This attribute enables the date tolerance in Calendar Cross Mode. Shopping will combine X dates (instead of just 1) from this leg with all dates from other leg. X value is derived from rule setting.</xs:documentation> </xs:annotation> </xs:attribute> </xs:complexType> </xs:element> <xs:choice> <xs:element name="SisterDestinationLocation" type="RequestSpecifiedLocationType" minOccurs="0" maxOccurs="unbounded"> <xs:annotation> <xs:documentation>List of alternate destination cities to search</xs:documentation> </xs:annotation> </xs:element> <xs:element name="SisterDestinationMileage" minOccurs="0"> <xs:complexType> <xs:attribute name="Number" type="xs:nonNegativeInteger" use="required"/> <xs:attribute name="AllowBorderCross" type="xs:boolean" use="optional"> <xs:annotation> <xs:documentation>Allow to return Alternate Cities from other countries.</xs:documentation> </xs:annotation> </xs:attribute> </xs:complexType> </xs:element> </xs:choice> <xs:choice> <xs:element name="SisterOriginLocation" type="RequestSpecifiedLocationType" minOccurs="0" maxOccurs="unbounded"> <xs:annotation> <xs:documentation>List of alternate origin cities to search</xs:documentation> </xs:annotation> </xs:element> <xs:element name="SisterOriginMileage" minOccurs="0"> <xs:complexType> <xs:attribute name="Number" type="xs:nonNegativeInteger" use="required"/> <xs:attribute name="AllowBorderCross" type="xs:boolean" use="optional"> <xs:annotation> <xs:documentation>Allow to return Alternate Cities from other countries.</xs:documentation> </xs:annotation> </xs:attribute> </xs:complexType> </xs:element> </xs:choice> <xs:element name="SegmentType" minOccurs="0"> <xs:complexType> <xs:attribute name="Code" use="optional"> <xs:annotation> <xs:documentation>"Code" can be "ARUNK", "O" for normal, or "X" for connection.</xs:documentation> </xs:annotation> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="ARUNK"> <xs:annotation> <xs:documentation>Arrival unknown</xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="O"> <xs:annotation> <xs:documentation>Normal</xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="X"> <xs:annotation> <xs:documentation>Connection. Collapses this and subsequent OriginDestinationInformation so that they are treated as single leg.</xs:documentation> </xs:annotation> </xs:enumeration> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> </xs:element> <xs:element name="AlternateTime" minOccurs="0"> <xs:annotation> <xs:documentation>Maximum time difference/deviation allowed.</xs:documentation> </xs:annotation> <xs:complexType> <xs:attribute name="PlusMinus" type="Numeric0to9" use="optional"> <xs:annotation> <xs:documentation>Maximum time difference between actual and desired time.</xs:documentation> </xs:annotation> </xs:attribute> <xs:attribute name="Plus" type="Numeric0to9" use="optional"> <xs:annotation> <xs:documentation>Maximum number of hours after desired time.</xs:documentation> </xs:annotation> </xs:attribute> <xs:attribute name="Minus" type="Numeric0to72" use="optional"> <xs:annotation> <xs:documentation>Maximum number of hours before desired time.</xs:documentation> </xs:annotation> </xs:attribute> </xs:complexType> </xs:element> <xs:element name="MaxOneWayOptions" minOccurs="0"> <xs:annotation> <xs:documentation>Maximum number of options to return.</xs:documentation> </xs:annotation> <xs:complexType> <xs:attribute name="Value" type="xs:unsignedShort" use="required"/> </xs:complexType> </xs:element> <xs:element name="NumOneWayOptions" minOccurs="0"> <xs:annotation> <xs:documentation>Number of options for requested date.</xs:documentation> </xs:annotation> <xs:complexType> <xs:attribute name="Number" type="xs:unsignedShort" use="required"/> </xs:complexType> </xs:element> <xs:element name="CabinPref" type="CabinPrefType" minOccurs="0"> <xs:annotation> <xs:documentation xml:lang="en">Defines preferred cabin to be used in a search for this leg level (if SegmentType is "O") or segment (if SegmentType is "X"). The cabin type specified in this element will override the cabin type specified at the request level for this leg/segment. If a cabin type is not specified for this element the cabin type at request level will be used as default for this leg or segment. If the cabin type is not specified at both the leg/segment level and request level a default cabin of "Economy" will be used?</xs:documentation> </xs:annotation> </xs:element> <xs:element name="ConnectionTime" minOccurs="0"> <xs:annotation> <xs:documentation>Connection time between segments.</xs:documentation> </xs:annotation> <xs:complexType> <xs:attribute name="Min" type="xs:nonNegativeInteger" use="optional"/> <xs:attribute name="Max" type="xs:nonNegativeInteger" use="optional"/> <xs:attribute name="ExcludedConnectionBegin" type="TimeWindowBoundaryType" use="optional"> <xs:annotation> <xs:documentation>Excluded connection time begin in format HHMM</xs:documentation> </xs:annotation> </xs:attribute> <xs:attribute name="ExcludedConnectionEnd" type="TimeWindowBoundaryType" use="optional"> <xs:annotation> <xs:documentation>Excluded connection time end in format HHMM</xs:documentation> </xs:annotation> </xs:attribute> <xs:attribute name="EnableExcludedConnection" type="xs:boolean" use="optional"> <xs:annotation> <xs:documentation>Enable excluded connection time (default: true)</xs:documentation> </xs:annotation> </xs:attribute> </xs:complexType> </xs:element> <xs:element name="TotalTravelTime" minOccurs="0" maxOccurs="1"> <xs:annotation> <xs:documentation>Total travel time settings</xs:documentation> </xs:annotation> <xs:complexType> <xs:attribute name="Min" type="xs:unsignedInt" use="optional"/> <xs:attribute name="Max" type="xs:unsignedInt" use="optional"/> </xs:complexType> </xs:element> </xs:sequence> </xs:group>

    When I create these classes it is didn't create in soapCall request XML
    How Can I handle It?
    this is full XSD for this WSDL : https://developer.sabre.com/sites/default/files/resources/9229/BargainFinderMaxRQ_v6-4-0.xsd
    
    opened by amigogobara 1
  • PHP 8 Support

    PHP 8 Support

    Adding PHP 8 support.

    Because of php-vcr/phpunit-testlistener-vcr#38 (looks like package is not being maintained anymore) I was forced to remove this package from dependencies

    opened by glebLaModa 1
  • StreamContextFactory::create fails to honour context settings (Specifically for SSL)

    StreamContextFactory::create fails to honour context settings (Specifically for SSL)

    When I tried to generate the classes from a WSDL with some specific SSL settings (Custom certificate and peer verification disabled):

    $context = stream_context_create(array(
        'http' => array( 'user_agent' => 'MyPHPSoapClient' ),
        'ssl' => [
            // set some SSL/TLS specific options
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        ]
    ));
    
    $options = array(
        'local_cert' => 'local.pem',
        'stream_context' => $context
    );
    
    

    Executing the code fails:

    Warning: DOMDocument::load(): SSL operation failed with code 1. OpenSSL Error messages:
    error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in /home/symfony/projects/soap-client/vendor/wsdl2phpgenerator/wsdl2phpgenerator/src/Xml/SchemaDocument.php on line 63
    
    Warning: DOMDocument::load(): Failed to enable crypto in /home/symfony/projects/soap-client/vendor/wsdl2phpgenerator/wsdl2phpgenerator/src/Xml/SchemaDocument.php on line 63
    
    Warning: DOMDocument::load(<WSDL_REDACTED>): failed to open stream: operation failed in /home/symfony/projects/soap-client/vendor/wsdl2phpgenerator/wsdl2phpgenerator/src/Xml/SchemaDocument.php on line 63
    
    Warning: DOMDocument::load(): I/O warning : failed to load external entity "<WSDL_REDACTED>" in /home/symfony/projects/soap-client/vendor/wsdl2phpgenerator/wsdl2phpgenerator/src/Xml/SchemaDocument.php on line 63
    
    Fatal error: Uncaught Exception: Unable to load XML from <WSDL_REDACTED> in /home/symfony/projects/soap-client/vendor/wsdl2phpgenerator/wsdl2phpgenerator/src/Xml/SchemaDocument.php:65
    Stack trace:
    #0 /home/symfony/projects/soap-client/vendor/wsdl2phpgenerator/wsdl2phpgenerator/src/Xml/WsdlDocument.php(52): Wsdl2PhpGenerator\Xml\SchemaDocument->__construct(Object(Wsdl2PhpGenerator\Config), '<WSDL_REDACTED>')
    #1 /home/symfony/projects/soap-client/vendor/wsdl2phpgenerator/wsdl2phpgenerator/src/Generator.php(104): Wsdl2PhpGenerator\Xml\WsdlDocument->__construct(Object(Wsdl2PhpGenerator\Config), '<WSDL_REDACTED>')
    #2 /home/symfony/projects/soap-client/vendor/wsdl2phpgenerator/wsdl2phpgenerator/src/Generator.php(89): Wsdl2PhpGenerator\Generator->load('<WSDL_REDACTED>')
    #3 /home/symfony/projects/soap-client/build.php(27): Wsdl2PhpGenerator\Generator->generate(Object(Wsdl2PhpGenerator\Config))
    #4 {main}
      thrown in /home/symfony/projects/soap-client/vendor/wsdl2phpgenerator/wsdl2phpgenerator/src/Xml/SchemaDocument.php on line 65
    

    The problem is that the context generated here: https://github.com/wsdl2phpgenerator/wsdl2phpgenerator/blob/c92d01beed99b26b75d8c514f386f39eb84454c1/src/Xml/SchemaDocument.php#L52-L55

    Fails to acknowledge the previous settings. I fixed it by modifying the first lines of StreamContextFactory::create from this: https://github.com/wsdl2phpgenerator/wsdl2phpgenerator/blob/master/src/StreamContextFactory.php#L22-L26 To this:

        public function create(ConfigInterface $config)
        {
    
            $soapOptions = $config->get('soapClientOptions');
    
            if(isset($soapOptions['stream_context'])) {
                $options = stream_context_get_options($soapOptions['stream_context']);
            } else {
                $options = array();
            }
            $headers = array();
    
    opened by ericol 1
Releases(3.4.0)
Class helpers for Symfony applications

Micro-Symfony Tools Class helpers for Symfony applications. Installation composer require yceruto/micro-symfony Micro-Bundle Bundles are a very impor

Yonel Ceruto 4 Sep 23, 2022
Ariama Victor (A.K.A. OVAC4U) 106 Dec 25, 2022
Single file PHP script that adds a REST API to a SQL database

PHP-CRUD-API Single file PHP script that adds a REST API to a MySQL/MariaDB, PostgreSQL, SQL Server or SQLite database. NB: This is the TreeQL referen

Maurits van der Schee 3.2k Jan 8, 2023
A simple object-relational mapping library built using PHP.

A simple object-relational mapping library built using PHP.

Maleesha Gimshan 2 Jun 29, 2021
A RESTful and extendable Backend as a Service that provides instant backend to develop sites and apps faster, with dead-simple integration for JavaScript, iOS, Android and more.

Welcome to hook ![Gitter](https://badges.gitter.im/Join Chat.svg) hook is a RESTful, extendable Backend as a Service that provides instant backend to

doubleleft 762 Dec 30, 2022
Simple and effective multi-format Web API Server to host your PHP API as Pragmatic REST and / or RESTful API

Luracast Restler ![Gitter](https://badges.gitter.im/Join Chat.svg) Version 3.0 Release Candidate 5 Restler is a simple and effective multi-format Web

Luracast 1.4k Dec 14, 2022
A simple and flexible PHP middleware dispatcher based on PSR-7, PSR-11, and PSR-15

Woohoo Labs. Harmony Woohoo Labs. Harmony is a PSR-15 compatible middleware dispatcher. Harmony was born to be a totally flexible and almost invisible

Woohoo Labs. 153 Sep 5, 2022
The efficient and elegant JSON:API 1.1 server library for PHP

Woohoo Labs. Yin Woohoo Labs. Yin is a PHP framework which helps you to build beautifully crafted JSON:APIs. Table of Contents Introduction Features W

Woohoo Labs. 237 Nov 28, 2022
The efficient and elegant, PSR-7 compliant JSON:API 1.1 client library for PHP

Woohoo Labs. Yang Woohoo Labs. Yang is a PHP framework which helps you to communicate with JSON:API servers more easily. Table of Contents Introductio

Woohoo Labs. 160 Oct 16, 2022
This API provides functionality for creating and maintaining users to control a simple To-Do-List application. The following shows the API structure for users and tasks resources.

PHP API TO-DO-LIST v.2.0 This API aims to present a brief to consume a API resources, mainly for students in the early years of Computer Science cours

Edson M. de Souza 6 Oct 13, 2022
A simple PHP package for sending messages to Slack, with a focus on ease of use and elegant syntax.

Slack for PHP | A simple PHP package for sending messages to Slack with incoming webhooks, focused on ease-of-use and elegant syntax. supports: PHP 7.

null 128 Nov 28, 2022
Quickly and easily expose Doctrine entities as REST resource endpoints with the use of simple configuration with annotations, yaml, json or a PHP array.

Drest Dress up doctrine entities and expose them as REST resources This library allows you to quickly annotate your doctrine entities into restful res

Lee Davis 88 Nov 5, 2022
ObjectHydrator - Object Hydration library to create Command and Query objects.

Object Hydrator This is a utility that converts structured request data (for example: decoded JSON) into a complex object structure. The intended use

EventSauce 264 Dec 14, 2022
A PHP library to support implementing representations for HATEOAS REST web services.

Hateoas A PHP library to support implementing representations for HATEOAS REST web services. Installation Working With Symfony Usage Introduction Conf

William Durand 998 Dec 5, 2022
This PHP library will help you to work with your Pinterest account without using any API account credentials.

Pinterest Bot for PHP A PHP library to help you work with your Pinterest account without API credentials. The Pinterest API is painful: receiving an a

Sergey Zhuk 414 Nov 21, 2022
YouTrack RestAPI library for PHP. An implementation for communicating with your YouTrack instance.

YouTrack API PHP This is an implementation for communicating with the JetBrains YouTrack RestAPI. This library covers basic resource calls available i

Samih Soylu 4 May 3, 2022
微信支付 API v3 的 PHP Library,同时也支持 API v2

微信支付 WeChatPay OpenAPI SDK [A]Sync Chainable WeChatPay v2&v3's OpenAPI SDK for PHP 概览 微信支付 APIv2&APIv3 的Guzzle HttpClient封装组合, APIv2已内置请求数据签名及XML转换器,应

null 275 Jan 5, 2023
PHP Pi Horizon Client Library

phpi-sdk PHP Pi Horizon Client Library This is part of FASTLANE project for the pi payment gateway, as we are trying to build a pi wallet inside FASTL

EMSec 4 May 23, 2022
A PHP library for the CoinMarketCap API designed to be easy to use.

Help wanted: I don't have enough time to keep updating this library, if you can, don't be shy. Pull requests are welcome. PHP CoinMarketCap API This p

Shahrad Elahi 12 Sep 23, 2022