定制 zenopay/zenopay-php 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

zenopay/zenopay-php

Composer 安装命令:

composer require zenopay/zenopay-php

包简介

A PHP package for ZenoPay payment processing.

README 文档

README

Here's a polished and structured README.md for your ZenoPay PHP Integration GitHub project:

# ZenoPay PHP Integration

> A simple PHP client for ZenoPay Mobile Money Tanzania API  
> Create payment orders, check status, and handle webhooks with ease.

---

## Table of Contents

- [Features](#features)  
- [Prerequisites](#prerequisites)  
- [Installation](#installation)  
- [Configuration](#configuration)  
- [Usage](#usage)  
  - [1. Create Order](#1-create-order)  
  - [2. Check Order Status](#2-check-order-status)  
  - [3. Handle Webhook Notifications](#3-handle-webhook-notifications)  
- [Error Logging](#error-logging)  
- [Support](#support)  

---

## Features

✅ Create Mobile Money payment orders in Tanzania  
✅ Check transaction/order status  
✅ Handle webhook callbacks for status updates  
✅ Log errors and webhook payloads  

---

## Prerequisites

- PHP 7.0+  
- cURL extension enabled  
- Write permissions in project directory (for log files)

---

## Installation

```bash
git clone https://github.com/your-username/zenopay-php-client.git
cd zenopay-php-client

Configuration

Create a file named config.php in the root directory:

<?php
// config.php

// Your ZenoPay API key
define('ZP_API_KEY', 'YOUR_API_KEY_HERE');

// Base URL for ZenoPay endpoints
define('ZP_BASE_URL', 'https://zenoapi.com/api/payments');

Usage

1. Create Order

Save as create_order.php:

<?php
require 'config.php';

$orderData = [
    'order_id'    => uniqid('', true),
    'buyer_email' => 'customer@example.com',
    'buyer_name'  => 'John Doe',
    'buyer_phone' => '0744963858', // Tanzanian format
    'amount'      => 1000,         // Amount in TZS
    'webhook_url' => 'https://your-domain.com/webhook', // Optional
];

$ch = curl_init(ZP_BASE_URL . '/mobile_money_tanzania');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Content-Type: application/json',
        'x-api-key: ' . ZP_API_KEY,
    ],
    CURLOPT_POSTFIELDS     => json_encode($orderData),
]);

$response = curl_exec($ch);
if ($response === false) {
    file_put_contents('error_log.txt', date('[Y-m-d H:i:s] ') . 'cURL Error: ' . curl_error($ch) . PHP_EOL, FILE_APPEND);
    exit('Request failed. Check error_log.txt');
}

$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpCode !== 200) {
    file_put_contents('error_log.txt', date('[Y-m-d H:i:s] ') . "HTTP Error: {$httpCode} - {$response}" . PHP_EOL, FILE_APPEND);
    exit("HTTP {$httpCode}: {$response}");
}

$data = json_decode($response, true);
if ($data['status'] === 'success') {
    echo "✅ Order created! Order ID: {$data['order_id']}\n";
} else {
    echo "❌ Error: {$data['message']}\n";
}

Sample Success Response:

{
  "status": "success",
  "resultcode": "000",
  "message": "Request in progress. You will receive a callback shortly",
  "order_id": "3rer407fe-3ee8-4525-456f-ccb95de38250"
}

2. Check Order Status

Save as check_status.php:

<?php
require 'config.php';

$orderId = '3rer407fe-3ee8-4525-456f-ccb95de38250';

$url = ZP_BASE_URL . '/order-status?order_id=' . urlencode($orderId);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'x-api-key: ' . ZP_API_KEY,
    ],
]);

$response = curl_exec($ch);
if ($response === false) {
    exit('cURL Error: ' . curl_error($ch));
}

$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
    exit("HTTP {$httpCode}: {$response}");
}

$data = json_decode($response, true);
if (!empty($data['data']) && $data['result'] === 'SUCCESS') {
    foreach ($data['data'] as $order) {
        echo "🔎 Order ID: {$order['order_id']}\n";
        echo "   Status: {$order['payment_status']}\n";
        echo "   Amount: {$order['amount']} TZS\n";
        echo "   Reference: {$order['reference']}\n";
    }
} else {
    echo "❌ Error: {$data['message']}\n";
}

3. Handle Webhook Notifications

Save as webhook.php:

<?php
require 'config.php';

if ($_SERVER['HTTP_X_API_KEY'] !== ZP_API_KEY) {
    http_response_code(403);
    exit('Invalid API key');
}

$payload = file_get_contents('php://input');

file_put_contents(
    'weblogs.txt',
    date('[Y-m-d H:i:s] ') . $payload . PHP_EOL,
    FILE_APPEND
);

$data = json_decode($payload, true);

// Example payload:
// {
//   "order_id":"677e43274d7cb",
//   "payment_status":"COMPLETED",
//   "reference":"1003020496",
//   "metadata":{
//     "product_id":"12345",
//     "color":"blue",
//     "size":"L",
//     "custom_notes":"Please gift-wrap this item."
//   }
// }

// TODO: update your DB, send email, etc.

http_response_code(200);
echo 'OK';

Error Logging

  • error_log.txt: Stores cURL and HTTP errors
  • weblogs.txt: Stores raw webhook payloads

Ensure these files are writable by the web server.

Support

Need help? Contact us:

📧 Email: support@zenoapi.com 🌐 Website: https://zenoapi.com 🐛 GitHub Issues: Open an issue

Built by ZenoPay · Simplifying Digital Payments in Tanzania 🇹🇿


---

zenopay/zenopay-php 适用场景与选型建议

zenopay/zenopay-php 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 5.9k 次下载、GitHub Stars 达 9, 最近一次更新时间为 2024 年 07 月 24 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 zenopay/zenopay-php 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 zenopay/zenopay-php 我们能提供哪些服务?
定制开发 / 二次开发

基于 zenopay/zenopay-php 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 5.9k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 9
  • 点击次数: 6
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 9
  • Watchers: 1
  • Forks: 3
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-07-24