iOS 微信支付

微信支付接入流程:

下載微信支付idk 地址: https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319164&lang=zh_CN
將下載好的資源包放入工程
設(shè)置bit code 為NO

2644321-42c4d5bdf33db627.png
#import "WXApi.h"
//遵守協(xié)議
@interface AppDelegate ()<WXApiDelegate>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//微信支付注冊(cè)
[WXApi registerApp:@"你申請(qǐng)的微信appId"];
return YES;
}
//下面兩個(gè)方法已廢棄
- (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];
}
//注意要寫此方法,否則支付結(jié)果不會(huì)回調(diào)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options
{
if ([url.host isEqualToString:@"safepay"]) {
return [WXApi handleOpenURL:url delegate:self];
}
//微信支付回調(diào)方法
- (void)onResp:(BaseResp *)resp
{
switch (resp.errCode) {
case WXSuccess:
{
//成功
}
break;
case WXErrCodeCommon:
{
//普通錯(cuò)誤類型
}
break;
case WXErrCodeUserCancel:
{
//用戶點(diǎn)擊取消并返回
}
break;
case WXErrCodeSentFail:
{
//發(fā)送失敗
}
break;
case WXErrCodeAuthDeny:
{
//授權(quán)失敗
}
break;
case WXErrCodeUnsupport:
{
//微信不支持
}
break;
default:
break;
}
}

支付頁(yè)面導(dǎo)入頭文件

#import "WXApi.h"
- (void)pay{
//dic[@"sign"]是后臺(tái)統(tǒng)一下單返回的數(shù)據(jù),前端調(diào)起支付需要后臺(tái)先在微信完成統(tǒng)一下單
NSDictionary *resultDic = dic[@"sign"];
NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0];
int time_stamp=(int)[date timeIntervalSince1970];
//調(diào)起微信支付
PayReq* req            = [[PayReq alloc] init];
req.partnerId          = [resultDic objectForKey:@"mch_id"];
req.prepayId            = [resultDic objectForKey:@"prepay_id"];
req.nonceStr            = [resultDic objectForKey:@"nonce_str"];
req.timeStamp          = time_stamp;
req.package            = @"Sign=WXPay";
NSDictionary *parameters =@{@"appid":@"wxc896d9d1b6757532",@"partnerid":req.partnerId,@"prepayid":req.prepayId,@"package":@"Sign=WXPay",@"noncestr":req.nonceStr,@"timestamp":[[NSString alloc]initWithFormat:@"%d",time_stamp]};
NSMutableDictionary *mutableDic=[[NSMutableDictionary alloc]initWithDictionary:parameters];
req.sign=[self createMd5Sign:mutableDic];
//發(fā)起支付請(qǐng)求
[WXApi sendReq:req];
}
//微信支付創(chuàng)建package簽名
-(NSString *)createMd5Sign:(NSMutableDictionary*)dict
{
NSMutableString *contentString  =[NSMutableString string];
NSArray *keys = [dict allKeys];
//按字母順序排序
NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2 options:NSNumericSearch];
}];
//拼接字符串
for (NSString *categoryId in sortedArray) {
if (  ![[dict objectForKey:categoryId] isEqualToString:@""]
&& ![[dict objectForKey:categoryId] isEqualToString:@"sign"]
&& ![[dict objectForKey:categoryId] isEqualToString:@"key"]
){
[contentString appendFormat:@"%@=%@&", categoryId, [dict objectForKey:categoryId]];
}
}
//添加key字段
[contentString appendFormat:@"key=%@", @"你的秘鑰/我用的微信的secret字符串也是可以的,因?yàn)楹笈_(tái)在統(tǒng)一下單時(shí)用的這個(gè),所以這個(gè)地方和后臺(tái)保持一致就好"];
//得到MD5 sign簽名
NSString *md5Sign =[contentString md5];
return md5Sign;
}
//MD5加密
- (NSString *)md5
{
if(self == nil || [self length] == 0){
return nil;
}
const char *value = [self UTF8String];
unsigned char outputBuffer[CC_MD5_DIGEST_LENGTH];
CC_MD5(value, (CC_LONG)strlen(value), outputBuffer);
NSMutableString *outputString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(NSInteger count = 0; count < CC_MD5_DIGEST_LENGTH; count++){
[outputString appendFormat:@"%02x",outputBuffer[count]];
}
return outputString;
}

這樣支付就完成了,如果不回調(diào)支付結(jié)果,檢查一下AppDelegate里面是不是寫錯(cuò)了代理方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 抽個(gè)時(shí)間總結(jié)一下微信支付; 需要和微信申請(qǐng)APPID然后審核 (300塊大洋) 首先從官網(wǎng)上下載一個(gè)demo[網(wǎng)址...
    芝麻綠豆閱讀 2,058評(píng)論 11 46
  • 啥也不說(shuō)了,直接進(jìn)主題:首先去這個(gè)網(wǎng)頁(yè) https://open.weixin.qq.com/cgi-bin/sh...
    重駒閱讀 5,231評(píng)論 10 9
  • 最近做了一個(gè)新項(xiàng)目,涉及到支付寶和微信支付,支付寶和微信都是業(yè)界的老大哥,相信大家都有所覺(jué)得文檔、SDK都是各種坑...
    smile麗語(yǔ)閱讀 2,527評(píng)論 2 19
  • 步驟 1 下載微信終端SDK文件SDK文件包括 libWeChatSDK.a,WXApi.h,WXApiObjec...
    靜靜ZZ閱讀 232評(píng)論 0 0
  • 每天心情的沉寂,心里為什么就總是放不下?每天的心心念念,為何?你總是要出現(xiàn)。 我在等待、我在渴望!等待著你的信息,...
    迷霧凡塵閱讀 832評(píng)論 1 0

友情鏈接更多精彩內(nèi)容