# 4.消费交易

## 4.1. 消费交易地址 

 交易名称  |测试地址|生产地址  
 ------- |-----------|-------
 消费接口 |<https://testapi.allpayx.com/app/pay> |<https://api.allpayx.com/app/pay>

## 4.2. 消费交易接口

1.接口说明

商户网关将订单信息发送给 ALLPAY 网关,由 ALLPAY 网关进行处理后将交易流水 号,即 tn,返回给商户网关,tn 作为调起手机 app 支付控件的参数。

2.请求报文格式

下面列举的字段为通用字段,每个渠道都需要上送,部分渠道有渠道专属字段,具体字段请到该渠道的专属渠到字段说明处查看



| 参数          | 类型         | 属性 | 描述                                                         |
| ------------- | ------------ | ---- | ------------------------------------------------------------ |
| version       | String(12)   | M    | 统一填写为“VER000000002”                                     |
| charSet       | String(6)    | M    | 统一填写为“UTF-8”                                            |
| transType     | String(4)    | M    | 消费交易填写“PURC”                                           |
| orderNum      | String(60)   | M    | 订单号:商户自行定义,需保证同一商户号下订单号不能重复       |
| orderAmount   | String(12)   | M    | 订单金额:如 100 元,表示为 100 或 100.00                    |
| orderCurrency | String(3)    | M    | 订单币种:ISO标准 如:人民币填写“CNY”,美元填写"USD"          |
| frontURL      | String(400)  | M    | app 模式默认填"nil"                                          |
| backURL       | String(400)  | M    | 支付结果异步通知到该地址                                     |
| merReserve    | String(1024) | M    | 商户预留内容,可传任意内容,如购买商品信息、员号等,但不要传特殊符号,如逗号。 |
| merID         | String(15)   | M    | 商户 ID,由AllPay 分配                                       |
| acqID         | String(11)   | M    | 收单行 ID "99020344"                                         |
| paymentSchema | String(10)   | M    | 渠道代码:[点击查看详情](https://git.allpayx.com/OpenAPI/b2c_pc_payment/src/master/paymentSchema.md) |
| goodsInfo     | String(60)   | M    | 商品信息                                                     |
| transTime     | String(14)   | M    | 交易时间,格式:"yyyyMMddHHmmss"                               |
| signType      | String(3)    | M    | MD5                                                          |
| signature     | String(32)   | M    | 采用 MD5 签名                                                |

3. 响应报文格式

   | 参数 | 类型       | 属性 | 描述                               |
   | ---- | ---------- | ---- | ---------------------------------- |
   | tn   | String(32) | M    | 交易流水号,作为调起 sdk 支付的参数 |


## 4.4. iOS 客户端接入步骤

## 4.4.1. 接入说明 

启动支付控件的接口,接口定义如下:

```c
[AllPaySDK pay:[diction objectForKey:@"tn"] mode:NO scheme:@"com.xxx.xxx" ViewController:self onResult: ^(NSDictionary *resultDic) {

//此处处理同步支付结果

}];


参数说明
tn: 是从服务器端获取的流水号; mode:测试环境:NO; 生产环境:YES。

Scheme: 可以为任意值推荐填写成"com.xxx.xxx" 等形式, 有特殊配置的渠道会在渠道专属配置里面说明

ViewController: 调用 SDK 时的 ViewController;

onResult: 接收同步结果通知
```



## 4.4.2. 添加 SDK 包

1. 将  allpaysdk 下的 AllPaySDK.h,libAllPaySDK.a文件add到项目中
2. 在 APPDelegate.m 类中导入头文件: #import "allpaysdk/AllPaySDK.h" 并添加如下方法

```c
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ 

[AllPaySDK openURL:url]; return YES; 

}

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{ 

[AllPaySDK openURL:url]; return YES; 

} 

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{ 

[AllPaySDK openURL:url]; return YES; 

}
```

1. 根据要使用的渠道的专属配置,对项目进行配置

## 4.4.3 同步结果通知 

```c
[AllPaySDK pay:[diction objectForKey:@"tn"] mode:NO scheme:@"com.xxx.xxx" ViewController:self onResult: ^(NSDictionary *resultDic) { 

  //此处处理同步支付结果

 }];
 
```

resultDic,转为 json 字符串,格式如下:

{
  "state": "cancel",
  "paymentSchema": "YL",
  "orderNum": "604337497032",
  "errorDetail": "user cancel operation"
}

报文说明

- state: "success"代表成功, "cancel"代表用户取消操作, "fail"代表失败
- paymentSchema: 支付渠道, 印度本地支付:"EB", "APMP"代表支付宝,  "WX"代表微信,"APP"代表ApplePay
- orderNum: 订单号
- errorDetail: 错误详情

| 参数          |                             说明                             |
| ------------- | :----------------------------------------------------------: |
| state         | "success"代表成功, "cancel"代表用户取消操作, "fail"代表失败  |
| paymentSchema | 印度本地支付:"EB", "APMP"代表支付宝,  "WX"代表微信,"APP"代表ApplePay |
| orderNum      |                            订单号                            |
| errorDetail   |                           错误详情                           |

##