iOS開發(fā)--微信支付接入

首先你需要申請微信支付,申請相關(guān)支付參考:
申請資料填寫界面預(yù)覽

申請到微信支付相關(guān)以后身笤,下面這些東西對我們很重要。
前提條件:

//APPID 一般以wx開頭
static NSString *const JHAppID = @"APPID";
//appsecret
static NSString *const JHAppSecret = @"appsecret";
//商戶號数苫,填寫商戶對應(yīng)參數(shù)
static NSString *const JHMchID = @"商戶號";
//商戶API密鑰仪壮,填寫相應(yīng)參數(shù)
static NSString *const JHPartnerID = @"商戶API密鑰";
// 預(yù)支付請求路徑固定可以不改變
static NSString *const JHPrePayURL = @"https://api.mch.weixin.qq.com/pay/unifiedorder";
// // 支付回調(diào)頁面(異步)   (https://api.mch.weixin.qq.com/pay/unifiedorder)(異步處理支付調(diào)用返回數(shù)據(jù))
static NSString *const JHPayNotifyURL = @"支付回調(diào)頁面";

注意:

微信支付的單位為分处面,整數(shù)類型才可以(int)
  • 流程簡述
    支付要保證安全性斤斧,就要使用加密捂刺。微信當然也是這樣,微信為了防止中間有人加入竊取信息或者改變價格囚痴。有自己的加密方式——生成預(yù)支付Id叁怪,我們通過封裝數(shù)據(jù)形成XML格式(中間加密)以字符串類型傳給微信,獲取預(yù)支付Id深滚。緊接著奕谭,獲取以后通過預(yù)支付等信息再次加密。APP將參數(shù)傳給微信痴荐,付款成功血柳!回調(diào)信息說明支付情況。(關(guān)于加密具體怎么實現(xiàn)我會在下面詳細說明)生兆。

  • 接入步驟以及代碼

1难捌、在做微信支付以前導(dǎo)入:

libc++.tbd
libsqlite3.0.tbd
libz.tbd
SystemConfiguration.framework
CoreTelephony.framework
Security.framework

2鸦难、在AppDelegate 的導(dǎo)入頭文件 #import "WXApi.h" 掛上代理 WXApiDelegate

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
//這里是你自己寫的一些其他代碼 實例化window 設(shè)置根視圖云云
  [WXApi registerApp:@"APPID" withDescription:@"應(yīng)用描述"];

  } 
 //支付回調(diào)
  - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
   return  [WXApi handleOpenURL:url delegate:self];
   }
  - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
   return [WXApi handleOpenURL:url delegate:self];
   }
   #pragma mark 微信回調(diào)的代理方法
   - (void)onResp:(BaseResp *)resp {
   if ([resp isKindOfClass:[PayResp class]]) {
   PayResp *response = (PayResp *)resp;
   switch (response.errCode) {
   case WXSuccess:
   NSLog(@"suceess");
   break;
   default:
   NSLog(@"failed");
   break;
   }
   }
   }
如果集成里支付寶以及微信支付等 根吁,走的回調(diào)方法是相同的 ,我們是通過 回調(diào)中字符串sourceApplication 進行判斷的 例如支付寶支付 為com.alipay.iphoneclient 微信支付為 com.tencent.xin

3合蔽、在targets的info中添加 urltypes添加一個在 identifier自己起一個名稱(最好軟件英文名字) 在 URL schemes 中寫下APPID

1.png

4击敌、觸發(fā)支付
觸發(fā)支付,就要對自己的訂單號價格等進行加密 在這里就可以分成兩種加密 拴事,一種是在APP端進行加密沃斤,第二種是在服務(wù)端進行加密。一般使用的在服務(wù)端加密比較安全挤聘。一個個進行說明。

  • 服務(wù)端進行加密
    服務(wù)端加密我們不需要知道具體加密怎么進行的捅彻。我們只是需要將所需參數(shù)傳過去 我是用的AFN
 //初始化一個請求管理器
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//接口地址
NSString *urlString = [NSString stringWithFormat:@"%@%@",@"地址頭",@"其他"];
//參數(shù)字典
NSDictionary *parameters =@{@"fcode": @"賬號",
                            @"password": @"密碼",@"out_trade_no":@"訂單號",@"total_fee":@"金額(分為單位)",@"attach":@"商品詳情"};
//post請求
[manager POST:urlString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
    //返回狀態(tài)值1表示成功 0表示失敗
    NSString *state=responseObject[@"state"];
   //預(yù)支付ID
    NSString *prepayid=responseObject[@"prepayid"];
   //返回文字信息成功或者失敗
    NSString *message=responseObject[@"message"];
   //請求數(shù)據(jù)成功
        if ([state intValue]==1) {
   //支付信息
            PayReq* req             = [[PayReq alloc] init];
   //APPID
            req.openID              = [responseObject objectForKey:@"appid"];
   //商戶號
            req.partnerId           = [responseObject objectForKey:@"partnerid"];
   //預(yù)支付ID
            req.prepayId            = [responseObject objectForKey:@"prepayid"];
   //時間戳
            req.nonceStr            = [responseObject objectForKey:@"noncestr"];
   //支付類型(為固定字符串:Sign=WXPay)
            req.timeStamp           = [[responseObject objectForKey:@"timestamp"] intValue];
   //加密串
            req.package             = [responseObject objectForKey:@"package"];
   //預(yù)支付ID
            req.sign                = [responseObject objectForKey:@"sign"];

            // 發(fā)起微信支付
            [WXApi sendReq:req];;

        }
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}];

后臺沒有加密錯誤组去,那么會跳轉(zhuǎn)到微信上進行支付。

  • 微信支付成功以后 要通知服務(wù)端以及APP端 服務(wù)器是通過回調(diào)地址進行操作,而對于App端通過Appdelegate中回調(diào)函數(shù)調(diào)用微信代理步淹。
 - (BOOL)application:(UIApplication *)application    handleOpenURL:(NSURL *)url {
   return  [WXApi handleOpenURL:url delegate:self];
  }
  - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
   return [WXApi handleOpenURL:url delegate:self];
   }
   #pragma mark 微信回調(diào)的代理方法
 - (void)onResp:(BaseResp *)resp {
if ([resp isKindOfClass:[PayResp class]]) {
    PayResp *response = (PayResp *)resp;
    NSString *message;
    switch (response.errCode) {
      case WXSuccess:
        {  message=@"支付成功";
            [[NSNotificationCenter defaultCenter] postNotificationName:APP_PAY_SUCCESS object:nil];
        }
            break;
        case WXErrCodeCommon:
         //普通錯誤類型
            message=@"支付錯誤";
            break;
        case WXErrCodeUserCancel:
           //用戶點擊取消并且返回
           message=@"您取消了交易";
            break;
        case WXErrCodeSentFail:
            //發(fā)送失敗
           message=@"信息發(fā)送失敗";
            break;
        case WXErrCodeAuthDeny:
           //授權(quán)失敗
            message=@"授權(quán)失敗";
            break;
        case WXErrCodeUnsupport:
          //微信不不支持
           message=@"您的微信版本過低";
            break;
        default:
            NSLog(@"failed");
            break;
    }
  }
}

支付成功以后通過通知告知用戶支付情況.

  • 支付界面接收成功通知告知用戶(我這里是跳轉(zhuǎn)到新的界面)
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appPaySuccess) name:APP_PAY_SUCCESS object:nil];
  • 通知方法
-(void)appPaySuccess{
ZQPaySuccessVC *paySuccessVC=[[ZQPaySuccessVC alloc]init];
[self.navigationController pushViewController:paySuccessVC animated:YES];
}
  • 移除通知(不移除會崩潰呦)
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self name:APP_PAY_SUCCESS object:nil];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末从隆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缭裆,更是在濱河造成了極大的恐慌键闺,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澈驼,死亡現(xiàn)場離奇詭異辛燥,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門挎塌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來徘六,“玉大人,你說我怎么就攤上這事榴都〈猓” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵嘴高,是天一觀的道長竿音。 經(jīng)常有香客問我,道長拴驮,這世上最難降的妖魔是什么春瞬? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮莹汤,結(jié)果婚禮上快鱼,老公的妹妹穿的比我還像新娘。我一直安慰自己纲岭,他們只是感情好抹竹,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著止潮,像睡著了一般窃判。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喇闸,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天袄琳,我揣著相機與錄音,去河邊找鬼燃乍。 笑死唆樊,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的刻蟹。 我是一名探鬼主播逗旁,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舆瘪!你這毒婦竟也來了片效?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤英古,失蹤者是張志新(化名)和其女友劉穎淀衣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體召调,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡膨桥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年蛮浑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片国撵。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡陵吸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出介牙,到底是詐尸還是另有隱情壮虫,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布环础,位于F島的核電站囚似,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏线得。R本人自食惡果不足惜饶唤,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贯钩。 院中可真熱鬧募狂,春花似錦、人聲如沸角雷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勺三。三九已至雷滚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吗坚,已是汗流浹背祈远。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留商源,地道東北人车份。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像牡彻,于是被迫代替她去往敵國和親扫沼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容

  • iOS支付 iOS支付分為兩類讨便,第三方支付和應(yīng)用內(nèi)支付(內(nèi)購)充甚。 第三方支付包括:支付寶支付以政、微信支付霸褒、銀聯(lián)支付、...
    請輸入賬號名閱讀 6,203評論 3 22
  • 1,微信支付:微信支付其實還好,文檔比較清楚:1,請求預(yù)支付碼(服務(wù)器需要跟微信做好處理);2,發(fā)起支付;2,支付...
    WSKing的雜貨鋪閱讀 1,428評論 2 8
  • 前言:本篇文章目的在于梳理知識盈蛮,鞏固思想废菱,學習總結(jié)。有什么好的建議,都可以留言殊轴∷ゾ耄互相促進!總觀旁理,微信支付樊零,也沒心思...
    麥穗0615閱讀 10,041評論 8 70
  • 看早間新聞驻襟,有一則講美聯(lián)儲如何如何,禁不住亂想芋哭,這美聯(lián)儲于我沉衣,完全是異域呢,其工作內(nèi)容及意義减牺,完全不懂豌习。 忽地又想...
    鉛筆芒種閱讀 194評論 0 1
  • 章魚小丸子是一種舶來品似的小吃,小時候從沒有見過拔疚。 上高中時有機會去了廣州一趟肥隆,發(fā)現(xiàn)在街頭巷尾都有賣章魚小丸子的小...
    阿梨的小故事閱讀 794評論 2 3