패키지, 저장소 및 앱 카테고리 검색

패키지 상세v2.0.0

mpesa_flutter_plugin

이 플러그인을 사용하여 Flutter 앱에서 Lipa Na MPESA Online을 구현하세요. 이는 결제 초기화 인터페이스만 제공합니다.

AndroidiOSmacOSWindowsLinux
30일 다운로드
392
좋아요
51
Pub 점수
140

패키지 설치

flutter pub add mpesa_flutter_plugin

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

mpesa_flutter_plugin은 플러터 개발자가 앱에 리파 나 엠피사 온라인 결제를 통합할 수 있도록 해줍니다. 이 플러그인은 사용자가 엠피사 플랫폼을 통해 직접 결제할 수 있도록 MPESA 거래를 초기화하는 간단한 인터페이스를 제공합니다. 이 플러그인은 안드로이드, iOS, 맥OS, 윈도우, 리눅스 등 여러 플랫폼을 지원하여 크로스플랫폼 개발에 유연성을 제공합니다. 완전한 결제 처리나 관리는 포함하지 않으며, 결제 흐름을 시작하는 것에만 집중합니다. 동아프리카 시장에서 원활한 엠피사 통합이 필요한 앱에 이상적입니다.

사용 사례

  • 모바일 전자상거래 앱
  • 디지털 서비스 청구
  • 온라인 티켓팅 시스템
  • 구독 서비스
  • 기부 플랫폼

주요 기능

  • Lipa Na MPESA 온라인 초기화
  • 크로스 플랫폼 지원
  • 간단한 API 인터페이스
  • 보안 거래 시작
  • 실시간 결제 상태 추적

적합한 대상

  • 동아프리카 시장을 겨냥하는 개발자
  • MPESA 결제 통합이 필요한 앱
  • 핀테크 솔루션을 구축하는 스타트업
  • 케냐의 전자상거래 플랫폼
  • 모바일 결제 요구 사항이 있는 기업

고려 사항

  • 결제 콜백을 처리하지 않습니다
  • 토큰 관리를 위한 백엔드가 필요합니다
  • 적절한 환경 설정이 필요합니다
  • 지급 시작에만 제한됨
  • MPESA의 API 가용성에 따라 다름

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

Mpesa plugin

Use this plugin to implement Lipa Na MPESA Online.

Getting Started

Credentials
  1. Create an account on the Safaricom Developer Portal
  2. Create a Lipa na MPESA Online App
  3. Get your keys -> ConsumerKey and ConsumerSecret
Usage

This plugin requires good understanding of the MPESA C2B concept, in as much as it will help you complete the process, you will also need to get things right in order to have it serve you right. With that said,

These two places will help you get started on a better gear.

  1. Safaricom API Tutorial
  2. Safaricom Developer Portal Docs

From here, it's now simpler to have it on your app.

  1. You will need to set the keys before initiating the payment.
    import 'package:mpesa_flutter_plugin/mpesa_flutter_plugin.dart';
    
    void main(){
    MpesaFlutterPlugin.setConsumerKey(<your-consumer-key>);
    MpesaFlutterPlugin.setConsumerSecret(<your-consumer-secret>);
    runApp(new MyApp());
    
    }
  1. Initiate the payment.

dynamic transactionInitialisation;
//Wrap it with a try-catch
try {
//Run it
transactionInitialisation =
        await MpesaFlutterPlugin.initializeMpesaSTKPush(
                businessShortCode: <your_code>,//use your store number if the transaction type is CustomerBuyGoodsOnline
                transactionType: TransactionType.CustomerPayBillOnline, //or CustomerBuyGoodsOnline for till numbers
                amount: <amount_in_string_format>,
                partyA: <users_phone_to_request_payment>,
                partyB: <your_code>,
                callBackURL: <uri_to_receive_payment_results>,
                accountReference: <could_be_order_number>,
                phoneNumber: <users_phone_to-request_payment>,
                baseUri: <live_or_sandbox_base_uri>,
                transactionDesc: <short_description>,
                passKey: <your_passkey>);
                
} catch (e) {
//you can implement your exception handling here.
//Network un-reachability is a sure exception.

  /*
  Other 'throws':
  1. Amount being less than 1.0
  2. Consumer Secret/Key not set
  3. Phone number is less than 9 characters
  4. Phone number not in international format(should start with 254 for KE)
   */

print(e.getMessage());
}

With that you are pretty much done. Here is a breakdown of the params required :

  1. businessShortCode & partyB which you can apply from the developer portal mentioned in credentials, alternatively, use 174379 for test purposes.
  2. amount amount you expect from customer, in Ksh, double.
  3. phoneNumber & partyA the user's phone number to request payment from.
  4. callBackURL is where the payment results will be POSTed to you, Uri, if it has a path then specify host & path.
  5. accountReference what are the payments for? a short ref like users' order, account number...will be displayed to the user when requesting completion of payment.
  6. transactionDesc brief description of the transaction. Not actually a description, a descriptive word. (Sometimes optional)
  7. passKey obtained from portal, will be blended with a few more things to generate your final password later, alternatively, use bfb279f9aa9bdbcf158e97dd71a467cd2e0c893059b10f78e6b72ada1ed2c919 for test purposes.
  8. baseUri is the url that your transaction should be processed in. Now required as Uri for uniformity purposes, Note: Remember to switch to live instance URL before moving to prod.(https://sandbox.safaricom.co.ke is for testing)
Docs at a glance.

When you place the request, and network does it's job well, the MPESA payment processor will validate your parameters and send your an acknowledgement or an error response immediately: case success: expect something of this sort in transactionInitialisation var.

{
    "MerchantRequestID": "1466 - 405147 - 1",
    "CheckoutRequestID" : "ws_CO_DMZ_370754209_06062019172849964",
    "ResponseCode" : "0",
    "ResponseDescription": "Success.Request accepted for processing",
    "CustomerMessage" : "Success.Request accepted for processing"
}

It means just that, accepted for processing, yet to be processed.

else, if some of your params are not accepted, expect something of this sort:

{
    "requestId": "751-526141-1",
    "errorCode": "400.002.02",
    "errorMessage": "Bad Request - Invalid Amount"
}

After this, the payment processor will proceed to seek the user and hopefully find, hopefully accepts the payment by giving correct pin, and hopefully they have enough amount ... case success, expect something like this on your backend, where the callBackURL points to:

{ "Body":
    { "stkCallback":
            { "MerchantRequestID": "1466-405147-1",
            "CheckoutRequestID": "ws_CO_DMZ_370754209_06062019172849964",
            "ResultCode": 0,
            "ResultDesc": "The service request is processed successfully.",
            "CallbackMetadata": {
                            "Item":
                                    [
                                        {
                                        "Name": "Amount",
                                        "Value": 100.00
                                        },
                                        
                                        {
                                        "Name": "MpesaReceiptNumber",
                                        "Value": "NF68F38A1G"
                                        },
                                        
                                        {
                                        "Name": "Balance"
                                        },
                                        
                                        {
                                        "Name": "TransactionDate",
                                        "Value": 20190606172857
                                        }
                                    ]
            
                        }

              }

      }

}

case failure of a transaction, this is a sample of your result:

{
    "Body":
        {
        "stkCallback":
                {
                "MerchantRequestID":"24963-1092493-1",
                "CheckoutRequestID":"ws_CO_DMZ_511000437_07062019123449116",
                "ResultCode":2001,
                "ResultDesc":"[MpesaCB - ]The initiator information is invalid."

                }

        }

}

That's what in the docs in summary.

Plugin In Action

Contributing

Pull Requests are welcomed to this plugin project on GitHub.

카테고리

의존성

의존성 목록 1 개

소스 저장소

이 패키지를 사용하는 프로젝트

아직 데이터가 없습니다.