貌似[email protected]并没有Packagist的服务,它的WebHook推动的JSON的格式也不符合Packagist的API要求的格式。这就难办了,没法直接用它的WebHook来进行更新,每次推送上那些仓库托管平台还得去Packagist点一下”Update”。只好使用自己的服务器进行个中转,于是我就自己写了个简单的脚本。

公用API

我把它放上我的API那了,自己没有服务器的话可以直接用我的。
https://api.ixnet.work/update-packagist.php?username=<你的用户名>&apiToken=<你的apiToken>&packageURL=<你仓库的地址>

示例:
https://api.ixnet.work/update-packagist.php?username=fsgmhoward&apiToken=abcdefghijklmn&packageURL=https://git.oschina.net/fsgmhoward/IXNetwork-PHPLib.git

实际上这个脚本并不检查POST的内容,只要访问这个地址就能更新你的Packagist的repo。所以在任何的支持WebHook的代码托管平台新建一个Push和Tag Push的钩子,地址按照上面地址的格式填即可。

源码

如果你想放到你自己的服务器那也没所谓,这里有源码:

<?php
// Released under MIT
// Author: Howard Liu <[email protected]>

if(!isset($_GET['username']) || !isset($_GET['apiToken']) || !isset($_GET['packageURL'])) {
    header("HTTP/1.1 405 Method Not Allowed");
    exit("405 Error: Method Not Allowed");
}
$data = '{"repository":{"url":"'.$_GET['packageURL'].'"}}';
$ch = curl_init('https://packagist.org/api/update-package?username='.$_GET['username'].'&apiToken='.$_GET['apiToken']);                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data))                                                                       
);

exit(curl_exec($ch));

发表评论