1. 程式人生 > >支付寶、微信sdk支付流程模擬

支付寶、微信sdk支付流程模擬

今天和同事閒聊的時候,聊到對接支付寶和微信sdk的事情,聊完以後興致未盡。順便去網上搜了一下,怎樣做一款sdk,網上的教程少的可憐,能搜到的也是好壞各異,參差不齊。遂下決心,敲一篇部落格,把sdk的實現流程講解一下。給迷茫中的小白一點思路。還是那句話,一萬個讀者有一萬個哈姆雷特,一萬個程式設計師有一萬種編碼風格,程式碼僅供參考。最後的效果如圖:
支付sdk流程圖

sdk內部類檔案:
sdk

匯入sdk後demo內部類檔案:
demo

①UserInfoModel類作為傳入sdk的資料模型
UserInfoModel.h

#import <Foundation/Foundation.h>

@interface
UserInfoModel : NSObject
@property (nonatomic, copy) NSString *money; @end

②ResultModel類作為支付完成以後資料回撥模型
ResultModel.h

#import <Foundation/Foundation.h>

@interface ResultModel : NSObject

@property (nonatomic, copy)   void(^payResultBlock)(NSString *status, NSDictionary *payDict);

+ (instancetype)sharedInstance;

@end

ResultModel.m

#import "ResultModel.h"

@implementation ResultModel

+ (instancetype)sharedInstance {
    static ResultModel *resultModel;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        resultModel = [[ResultModel alloc] init];
    });

    return resultModel;
}

@end

③PayAndReddem類作為支付sdk入口
PayAndReddem.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "UserInfoModel.h"

@interface PayAndReddem : NSObject

+ (void)setupPayInfo:(UserInfoModel *)userInfo subClass:(UIViewController *)subCotroller payResult:(void (^)(NSString *status, NSDictionary *payDict))payResultBlock;

@end

PayAndReddem.m

#import "PayAndReddem.h"
#import "ThridViewController.h"
#import "PayModel.h"
#import "ResultModel.h"

@implementation PayAndReddem

+ (void)setupPayInfo:(UserInfoModel *)userInfo subClass:(UIViewController *)subCotroller payResult:(void (^)(NSString *status, NSDictionary *payDict))payResultBlock {
    [ResultModel sharedInstance].payResultBlock = payResultBlock;

    PayModel *payModel = [PayModel sharedPayInfo];
    payModel.money = userInfo.money;
    ThridViewController *payInputVC = [[ThridViewController alloc] init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:payInputVC];
    [subCotroller presentViewController:nav animated:YES completion:nil];
}

@end

④SecondViewController,從此處開始呼叫sdk,並將資料通過PayReddem傳入sdk。在支付完成以後,成功與否均返回此頁面

SecondViewController.m

#import "SecondViewController.h"
#import "PayAndReddem.h"

@interface SecondViewController ()

@property (nonatomic, strong) UITextField *textField;
@property (nonatomic, strong) UIButton *button;

@end

@implementation SecondViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor colorWithWhite:1 alpha:0.9];
    self.navigationItem.title = @"購買商品";
    [self setupSubviews];

}

- (void)setupSubviews {
    self.textField = [[UITextField alloc] initWithFrame:CGRectMake((CGRectGetWidth(self.view.bounds)-200)/2, 100, 200, 30)];
    self.textField.borderStyle = UITextBorderStyleNone;
    self.textField.backgroundColor = [UIColor whiteColor];
    self.textField.placeholder = @"請輸入支付金額(分)";
    [self.textField becomeFirstResponder];
    [self.view addSubview:self.textField];

    self.button = [UIButton buttonWithType:UIButtonTypeCustom];
    self.button.backgroundColor = [UIColor greenColor];
    [self.button setTitle:@"進入支付sdk" forState:UIControlStateNormal];
    [self.button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    self.button.frame = CGRectMake((CGRectGetWidth(self.view.bounds)-200)/2, 150, 200, 35);
    [self.button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:self.button];
}

- (void)buttonClick:(UIButton *)btn {
    BOOL isEmpty = [self checkTextField];

    //進入支付sdk
    if (isEmpty) {
        [PayAndReddem setupPayInfo:[self test] subClass:self payResult:^(NSString *status, NSDictionary *payDict) {
            if ([status isEqualToString:@"success"]) {
                //支付成功,並返回支付成功後的相應欄位
                NSLog(@"result_code=%@,result_msg=%@",payDict[@"result_code"],payDict[@"result_msg"]);
            } else if ([status isEqualToString:@"fail"]) {
                //支付失敗
                NSLog(@"支付失敗");
            }
        }];
    }
}

- (BOOL)checkTextField {
    if (self.textField.text.length > 0) {
        return YES;
    } else {
        NSLog(@"金額不能為空");
        return NO;
    }
}

//傳入支付sdk資料
- (UserInfoModel *)test {
    UserInfoModel *userInfoModel = [[UserInfoModel alloc] init];
    userInfoModel.money = self.textField.text;
    return userInfoModel;
}

@end

相關推薦

支付sdk支付流程模擬

今天和同事閒聊的時候,聊到對接支付寶和微信sdk的事情,聊完以後興致未盡。順便去網上搜了一下,怎樣做一款sdk,網上的教程少的可憐,能搜到的也是好壞各異,參差不齊。遂下決心,敲一篇部落格,把sdk的實現流程講解一下。給迷茫中的小白一點思路。還是那句話,一萬個讀者

HBuilder基礎上APP呼叫支付支付(PHP)

支付寶後端程式碼: /** * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * 訂單頁面支付(支付寶支付) *

手機POS機支付能否挑戰支付

你能想象到,只要2個手機“碰一碰”就能收付款了嗎?在今年12月,華為與銀聯合作了,推出新的支付方式了——手機POS機,使用者無需另行開啟支付視窗,只要“碰一碰”NFC標籤,支付視窗就能自動彈出。對於商家來說,設定NFC標籤的成本顯然不高,這也能讓他們省去購置POS機等支付裝置,節省成本。 &nb

抓住支付支付的“短板”,它成第三方支付平臺最大的黑馬

我們都知道,微信支付寶是目前為止最大的第三方支付平臺,從2004年支付寶成立以後,支付寶就依託於淘寶,作為淘寶獨立使用的第三方支付平臺,一直到2008年開始支付寶推出移動電子支付之後,支付寶才開始正式的面向第三方(非淘寶使用)。而支付寶又在2010年年底的時候跟中國銀行合作,推出了快捷支付,

支付介面呼叫(支付

一、支付寶支付 1、官方文件是最好的教程:        ①電腦網站支付文件:https://docs.open.alipay.com/270/105899/        ②支付寶沙箱使用教程:http

iOS支付(包括支付銀聯)封裝

前言 最近在學習構架,感覺到構架的魅力,自己用構架思想封裝了一個支付集合,歡迎使用! 開發環境 1、xcode 8以上 2、iOS 7.0以上 支付SDK的整合 1、支付寶 參照部落格 支付寶支付整合 ,裡面很詳細這裡就不多說了。 2、微信支付 3、銀聯支付 銀聯支付要

Android常用的第三方支付支付銀聯)

生成RSA私鑰 openssl>genrsa -out rsa_private_key.pem 1024 生成RSA公鑰 openssl>rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 將RSA私鑰轉換成PKCS8

仿支付EditText金額輸入驗證

金額輸入要考慮的幾種情況: **1.首位輸入小數點的情況 2.小數點後保留2位 3.當切換小數點位置時的處理 4.不能輸入多個小數點。** 不多說, 上程式碼: public class CashierInputFilter implements I

支付銀聯移動支付整合

一、支付寶移動支付 業務流程: SDK整合: 解壓介面壓縮檔案(檔名是 WS_MOBILE_PAY_SDK_BASE.zip),找到 IOS 的壓縮檔案(檔名是支付寶移動支付 SDK 標準版(iOS).zip)。 匯入程式碼 步驟1

支付APP支付 java服務端程式碼

支付寶和微信支付的接入基本只需要看官方文件就能很好的弄明白,這裡我做記錄一些我在接入是寫demo 首先需要建立一個配置管理的類: public final class ZhifubaoConfig { /** * 應用號 */ publ

支付移動支付的個人總結

今天在看了移動支付的文件,對整個流程都有了自己的理解,在這裡記錄下來自己的總結,把裡面的邏輯都整理一遍 一、支付寶支付 先去看官方的支付文件,連結如下 1、先說前期準備,關鍵就是要生成一對公鑰和私鑰,這個看官方文件,現在官方有個自動生成工具,其實挺方便的。注意的是如

企業支付SDK 四合一,JeeWx-api 1.2.2 版本釋出!

JeeWx-API 1.2.2 版本釋出,微信、企業微信、支付窗、微博SDK四合一         JEEWX-API 是第一款JAVA版微信極速SDK,同時整合企業微信SDK,支付窗SDK,微博SDK,可以快速的基於她

通過user-agent判斷使用者的請求是用QQ還是支付

通過user-agent判斷使用者是用QQ、微信還是支付寶開啟連結或二維碼   function is_weixn_qq(){ var ua = navigator.userAgent.toLowerCase(); if(ua.match(/MicroMessenger/i)=="

基於SDK支付介面服務端——支付

支付寶 準備: 1.建立應用,配置金鑰(詳見https://docs.open.alipay.com/291/105971); 2.jar包:alipay-sdk-java20170818173712.jar;commons-logging-1.1.

spring_boot_pay支付,銀聯支付詳細代碼案例

fan target 簽名加密 china 整合 提示 業務 rom sig spring-boot-pay 支付服務:支付寶,微信,銀聯詳細代碼案例(除銀聯支付可以測試以外,支付寶和微信支付測試均需要企業認證,個人無法完成測試),項目啟動前請仔細閱讀 註意事項 。 友情

有了支付為什麽要用聚合支付

聚合支付 在街上 近期好多網友朋友咨詢聚合支付產品是什麽!我有支付寶跟微信了,要聚合支付有什麽用?今天這邊我們就針對這個問題做個闡述! 首先我們先來了解下什麽是聚合支付,聚合支付也稱第四方支付,它只是把支付寶、微信、銀行這些機構的資金通道做了集成,並

針對APP的後臺支付程式碼(支付

APP支付: 1.微信支付: 這是app支付時,一個完整的流程 1.1首先要去微信開放平臺註冊,並建立APP 1.2取得微信支付的許可權 1.3 商戶平臺有公眾號平臺和APP平臺兩種,一定要是APP平臺,可以在下面這個地方

一個二維碼支援支付支付(上)

開發十年,就只剩下這套Java開發體系了 >>>        一個二維碼同時支援微信和支付寶掃描的原理很簡單,就是中間做了一個跳轉,判斷使用者用的是什麼瀏覽器請求的即可。     這裡首先要說清楚的是支

JS處理支付(同步提交/非同步提交)方式

PHP交流群:294088839 Python交流群:652376983 GO交流群:874512552 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title&

React Native (IOS和Android) 支付支付整合實戰(支付Android篇)

序言:React Native無論是在社群和應用程度上,在國內外是十分廣泛和普及的。而支付寶和微信在支付模組上都有或多或少的支援,雖然沒有完整的Demo,不過在我做過一個相關整合的專案後,在此我把相關的步驟和方法總結出來和大家分享,希望能夠幫助大家少走彎路,快速整合。 支付