---
url: "https://pay.weixin.qq.com/doc/v3/merchant/4013070351.md"
title: "APP调起支付"
doc_id: 4013070351
---

>更新时间：2025.02.19

商户通过[App下单](https://pay.weixin.qq.com/doc/v3/merchant/4013070347.md)接口获取到发起支付的必要参数prepay\_id后，商户APP再通过openSDK(详见[安卓](https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/Android.html)/[IOS](https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html)/[鸿蒙](https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/ohos.html)接入指引)的sendReq方法拉起微信支付。

注意：

- 需严格遵循 OpenSDK 接入指引（《[安卓](https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/Android.html)/[IOS](https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html)/[鸿蒙](https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/ohos.html)接入指引》）接入SDK 以及配置开发环境。其中，IOS务必按指引 4.1 节（通过 CocoaPods 集成）配置“URL scheme”：若未配置，商户 APP 跳转微信小程序时可能出现 universal link 校验不通过的报错。




## 接口说明

支持商户：【普通商户】

## 字段说明

### 请求参数

PayReq对象

| 参数名 | 类型 | 必填 | 描述 |
| --- |  --- | --- | --- |
| appId | string(32) | true | 填写下单时传入的【应用ID】appid。 |
| partnerId | string(32) | true | 填写下单时传入的【商户号】mchid。 |
| prepayId | string(64) | true | 预支付交易会话标识。[APP下单](https://pay.weixin.qq.com/doc/v3/merchant/4013070347.md)接口返回的prepay\_id，该值有效期为2小时，超过有效期需要重新请求[APP下单](https://pay.weixin.qq.com/doc/v3/merchant/4013070347.md)接口以获取新的prepay\_id。 |
| packageValue | string(128) | true | 填写固定值Sign=WXPay<br>注意：如果是ios则请求参数为“package” |
| nonceStr | string(32) | true | 随机字符串，不长于32位。该值建议使用随机数算法生成。 |
| timeStamp | string(10) | true | Unix时间戳，是从1970年1月1日（UTC/GMT的午夜）开始所经过的秒数。<br>注意：常见时间戳为秒级或毫秒级，该处必需传秒级时间戳。 |
| sign | string(512) | true | 签名，使用字段appId、timeStamp、nonceStr、prepayId以及[商户API证书](https://kf.qq.com/faq/161222NneAJf161222U7fARv.html)私钥生成的RSA签名值，详细参考[APP调起支付签名](https://pay.weixin.qq.com/doc/v3/merchant/4012365340.md)。 |

请求示例

ios示例代码：

```
PayReq *request = [[[PayReq alloc] init] autorelease];
request.appId = "wxd930ea5d5a258f4f";
request.partnerId = "1900000109";
request.prepayId= "1101000000140415649af9fc314aa427",;
request.package = "Sign=WXPay";
request.nonceStr= "1101000000140429eb40476f8896f4c9";
request.timeStamp= "1398746574";
request.sign= "oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ\/X+QBhcCYL21N7cHCTUxbQ+EAt6Uy+lwSN22f5YZvI45MLko8Pfso0jm46v5hqcVwrk6uddkGuT+Cdvu4WBqDzaDjnNa5UK3GfE1Wfl2gHxIIY5lLdUgWFts17D4WuolLLkiFZV+JSHMvH7eaLdT9N5GBovBwu5yYKUR7skR8Fu+LozcSqQixnlEZUfyE55feLOQTUYzLmR9pNtPbPsu6WVhbNHMS3Ss2+AehHvz+n64GDmXxbX++IOBvm2olHu3PsOUGRwhudhVf7UcGcunXt8cqNjKNqZLhLw4jq\/xDg==";
[WXApi sendReq：request];
```

android示例代码：

```
IWXAPI api;
PayReq request = new PayReq();
request.appId = "wxd930ea5d5a258f4f";
request.partnerId = "1900000109";
request.prepayId= "1101000000140415649af9fc314aa427",;
request.packageValue = "Sign=WXPay";
request.nonceStr= "1101000000140429eb40476f8896f4c9";
request.timeStamp= "1398746574";
request.sign= "oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ\/X+QBhcCYL21N7cHCTUxbQ+EAt6Uy+lwSN22f5YZvI45MLko8Pfso0jm46v5hqcVwrk6uddkGuT+Cdvu4WBqDzaDjnNa5UK3GfE1Wfl2gHxIIY5lLdUgWFts17D4WuolLLkiFZV+JSHMvH7eaLdT9N5GBovBwu5yYKUR7skR8Fu+LozcSqQixnlEZUfyE55feLOQTUYzLmR9pNtPbPsu6WVhbNHMS3Ss2+AehHvz+n64GDmXxbX++IOBvm2olHu3PsOUGRwhudhVf7UcGcunXt8cqNjKNqZLhLw4jq\/xDg==";
api.sendReq(request);
```

鸿蒙示例代码：

```
IWXAPI api;
let req = new wxopensdk.PayReq
req.appId = 'wxd930ea5d5a258f4f'
req.partnerId = '1900000109'
req.prepayId = '1101000000140415649af9fc314aa427'
req.packageValue = 'Sign=WXPay'
req.nonceStr = '1101000000140429eb40476f8896f4c9'
req.timeStamp = '1398746574'
req.sign = 'oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ\/X+QBhcCYL21N7cHCTUxbQ+EAt6Uy+lwSN22f5YZvI45MLko8Pfso0jm46v5hqcVwrk6uddkGuT+Cdvu4WBqDzaDjnNa5UK3GfE1Wfl2gHxIIY5lLdUgWFts17D4WuolLLkiFZV+JSHMvH7eaLdT9N5GBovBwu5yYKUR7skR8Fu+LozcSqQixnlEZUfyE55feLOQTUYzLmR9pNtPbPsu6WVhbNHMS3Ss2+AehHvz+n64GDmXxbX++IOBvm2olHu3PsOUGRwhudhVf7UcGcunXt8cqNjKNqZLhLw4jq\/xDg=='
api.sendReq(context: common.UIAbilityContext, req)
```

返回示例

ios示例代码：

```
-(void)onResp：(BaseResp*)resp{
if ([respisKindOfClass：[PayRespclass]]){
    PayResp*response=(PayResp*)resp;
    switch(response.errCode){
                caseWXSuccess： //服务器端查询支付通知或查询API返回的结果再提示成功
                          NSlog(@"支付成功");
                break;
                default：
                          NSlog(@"支付失败，retcode=%d",resp.errCode);
                break;
      }
  }
}
```

android示例代码：

```
public void onResp(BaseRespresp){
    if(resp.getType()==ConstantsAPI.COMMAND_PAY_BY_WX){
    Log.d(TAG,"onPayFinish,errCode="+resp.errCode);
    AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
    builder.setTitle(R.string.app_tip);
    }
}
```

鸿蒙示例代码：

```
onResp(resp: wxopensdk.BaseResp): void {
	Log.i(kTag, "onResp:%s", JSON.stringify(resp))
	this.onRespCallbacks.forEach((on) => {
	on(resp)
	})
}
```

### 应答参数

用户从微信收银台返回商户APP时openSDK会onResp回调，商户可通过回调errCode参数展示相应支付结果。

注：前端回调并不保证它绝对可靠，不可只依赖前端回调判断订单支付状态，订单状态需以后端[查询订单](https://pay.weixin.qq.com/doc/v3/merchant/4013070356.md)和[支付成功回调通知](https://pay.weixin.qq.com/doc/v3/merchant/4013070368.md)为准。

| errCode值 | 描述 | 商户APP处理方案 |
| --- | --- | --- |
| 0 | 成功 | 调用后端接口查单，如果订单已支付则展示支付成功页面 |
| -1 | 错误 | 可能的原因：签名错误、未注册AppID、项目设置AppID不正确、注册的AppID与设置的不匹配、其他异常原因等。 |
| -2 | 取消支付 | 用户取消支付返回App，商户可自行处理展示。 |