大家都說微信支付很麻煩,我看了一下 就做一下記錄吧
一:
1.微信開發網站:https://open.weixin.qq.com
注冊一個開發者賬號,申請一個app,(大概7個工作日,但是好像不用那麼久)應該是一個賬號只能申請10個app,申請開通微信支付功能。
2.demo下載地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1
3.我記得我下載下來的demo就是好用的,不用調。
正常交互的是
交互細節如下:
步驟1:用戶進入商戶APP,選擇商品下單、確認購買,進入支付環節。商戶服務後台生成支付訂單,簽名後將數據傳輸到APP端。以微信提供的DEMO為例,見圖8.1。
步驟2:用戶點擊後發起支付操作,進入到微信界面,調起微信支付,出現確認支付界面,見圖8.2。
步驟3:用戶確認收款方和金額,點擊立即支付後出現輸入密碼界面,可選擇零錢或銀行卡支付見圖8.3。
圖8.1 商戶APP界面實例
圖8.2 跳轉到微信支付
圖8.3 用戶確認支付
第四步:輸入正確密碼後,支付完成,用戶端微信出現支付詳情頁面。見圖8.4。
第五步:回跳到商戶APP中,商戶APP根據支付結果個性化展示訂單處理結果。見圖8.5。
圖8.4 支付成功提示頁面
圖8.5 返回到商戶APP提示
4.業務流程是
商戶系統和微信支付系統主要交互說明:
步驟1:用戶在商戶APP中選擇商品,提交訂單,選擇微信支付。
步驟2:商戶後台收到用戶支付單,調用微信支付統一下單接口。
步驟3:統一下單接口返回正常的prepay_id,再按簽名規范重新生成簽名後,將數據傳輸給APP。參與簽名的字段名為appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式為Sign=WXPay
步驟4:商戶APP調起微信支付。
步驟5:商戶後台接收支付通知。
步驟6:商戶後台查詢支付結果。
二:
怎麼導入自己的工程裡呢??
1.我現在就導入了這一個文件WXApiManager.h/m
#import "AppDelegate.h" #import "WXApi.h" #import "WXApiObject.h" #import "WXApiManager.h" @interface AppDelegate ()<WXApiDelegate> @end @implementation AppDelegate #define APPID @"wxbxxxxxxxxxxx" - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; // self.window.backgroundColor = [UIColor whiteColor]; // [self.window makeKeyAndVisible]; [WXApi registerApp:APPID]; return YES; } - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
// self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; // self.window.backgroundColor = [UIColor whiteColor]; // [self.window makeKeyAndVisible];
這個一定要注釋掉
#import "ViewController.h" #import "WXApiObject.h" #import "WXApi.h" @interface ViewController () @end @implementation ViewController - (IBAction)PayButton:(id)sender { //============================================================ // V3&V4支付流程實現 // 注意:參數配置請查看服務器端Demo // 更新時間:2015年11月20日 //============================================================ NSString *i = @""; NSString *urlString = @"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios"; //解析服務端返回json數據 NSError *error; //加載一個NSURL對象 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]; //將請求的url數據放到NSData對象中 NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; if ( response != nil) { NSMutableDictionary *dict = NULL; //IOS5自帶解析類NSJSONSerialization從response中解析出數據放到字典中 dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error]; NSLog(@"url:%@",urlString); if(dict != nil){ NSMutableString *retcode = [dict objectForKey:@"retcode"]; if (retcode.intValue == 0){ NSMutableString *stamp = [dict objectForKey:@"timestamp"]; //調起微信支付 PayReq* req = [[[PayReq alloc] init]autorelease]; // req.partnerId = [dict objectForKey:@"partnerid"]; // req.prepayId = [dict objectForKey:@"prepayid"]; // req.nonceStr = [dict objectForKey:@"noncestr"]; // req.timeStamp = stamp.intValue; // req.package = [dict objectForKey:@"package"]; // req.sign = [dict objectForKey:@"sign"]; //商戶號 req.partnerId = @"10000100"; //預支付交易會話ID req.prepayId = @"wx2016032814422154f71338a50151536932"; //隨機字符串 req.nonceStr = @"5c95f7583741ee4ba8ae67f1658013dc"; NSMutableString *z = [NSMutableString stringWithFormat:@"1459147341"]; //時間戳 req.timeStamp = z.intValue; //擴展字段 req.package = [dict objectForKey:@"package"]; //簽名 req.sign = @"22FD8F35A93E5E4EE892CE3638CE4945"; [WXApi sendReq:req]; //日志輸出 NSLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",[dict objectForKey:@"appid"],req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign ); i = @""; }else{ i = [dict objectForKey:@"retmsg"]; } }else{ i = @"服務器返回錯誤,未獲取到json對象"; } }else{ i = @"服務器返回錯誤"; } }
參數都是那微信demo裡的參數填的
其實現在是可以支付的,親 可以試一下咯
2.還有通知和加密 ,下次再說咯。。。
希望可以幫打大家 有什麼不對的地方 歡迎指出 大家一起≈學習??