前言
大家都說微信支付很麻煩,我看了一下 就做一下記錄吧
正文
一:
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.還有通知和加密 ,下次再說咯。。。
希望可以幫打大家 有什么不對的地方 歡迎指出 大家一起≈學習😊
