微信支付 API
  1. APP支付
微信支付 API
  • 文档说明
    • 阅读对象
    • 版本说明
  • 名词表
    • 支付模式
    • 名词解释
    • 参数规定
  • 支付产品
    • 付款码支付
      • 支付账户
      • 场景介绍
      • 验证密码规则
      • 案例介绍
      • 协议规则
      • 开发指引
      • API列表
        • 付款码支付
        • 查询订单
        • 撤销订单
        • 申请退款
        • 查询退款
        • 下载交易账单
        • 下载资金账单
    • JSAPI支付
      • 支付账户
      • 场景介绍
      • 案例介绍
      • 接入前准备
      • 协议规则
      • 开发指引
      • 获取微信版本号
      • API列表
        • 统一下单
        • 查询订单
        • 关闭订单
        • 申请退款
        • 查询退款
        • 下载交易账单
        • 下载资金账单
        • 支付结果通知
        • 退款结果通知
    • Native支付
      • 支付账户
      • 场景介绍
      • 案例及规范
      • 协议规则
      • 开发指引
      • API列表
        • 统一下单
        • 查询订单
        • 关闭订单
        • 申请退款
        • 查询退款
        • 下载交易账单
        • 下载资金账单
        • 支付结果通知
    • APP支付
      • 支付账户
      • 场景介绍
      • 页面推荐示例
      • 协议规则
      • 开发指引
      • API详细说明
      • APP端开发步骤
      • API列表
        • 调起支付接口
        • 统一下单
        • 支付结果通知
        • 查询订单
        • 关闭订单
        • 申请退款
        • 查询退款
  • 接口规则
    • 协议规则
    • 参数规定
    • 安全规范
    • 获取openid
  • API列表
    • 统一下单
      POST
    • 查询订单
      POST
    • 关闭订单
      POST
    • 申请退款
      POST
    • 查询退款
      POST
    • 下载交易账单
      POST
    • 下载资金账单
      POST
    • 支付结果通知
      POST
    • 交易保障
      POST
    • 退款结果通知
      POST
  • API安全
    • 最佳安全实践
    • 安全与网络相关注意事项
    • HTTPS服务器配置
  • 最佳实践
    • 支付回调和查单实现指引
    • 回调通知注意事项
    • 专线商户Notify升级指引
    • 支付验收指引
    • 跨城冗灾方案
  • 运营规范
    • 运营规范
  • SDK与DEMO下载
    • SDK与DEMO下载
  1. APP支付

APP端开发步骤

IOS系统opensdk升级指引#

由于苹果公司在iOS13系统回收了查询 App bundleID 的能力,导致微信无法保证授权凭证能正确返回给AppID对应的应用。为此,微信支付强烈要求所有商户尽快升级到OpenSDK1.8.6,并让用户及时更新APP,否则安全风险将一直存在。谢谢配合!
详细OpenSDK升级指引请参见:opensdk升级指引
**注意:**opensdk升级后请一定按照文档要求完成验证工作,确保opensdk升级成功。
img
(以上截图来自opensdk升级指引)

IOS开发要点说明#

以下项目开发环境以Xcode6.0,运行环境为IOS7.0为例,说明其开发中需要的操作。
1、项目设置APPID
商户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性中的URL Schemes为您的APPID。如图8.7标红位置所示。
img
图8.7
2、注册APPID
商户APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID,代码如下:
[WXApi registerApp:@"wxd930ea5d5a258f4f" withDescription:@"demo 2.0"];
3、调起支付
商户服务器生成支付订单,先调用【统一下单API】生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付。以下是调起微信支付的关键代码:
PayReq *request = [[[PayReq alloc] init] autorelease];
request.partnerId = @"10000100";
request.prepayId= @"1101000000140415649af9fc314aa427";
request.package = @"Sign=WXPay";
request.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";
request.timeStamp= @"1397527777";
request.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";
[WXApi sendReq:request];
注意:该sign生成字段名列表见调起支付API
4、支付结果回调
照微信SDK Sample,在类实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意 一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。代码示例如下:
-(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;
      }
  }
} 
回调中errCode值列表:
名称描述解决方案
0成功展示成功页面
-1错误可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
-2用户取消无需处理。发生场景:用户不支付了,点击取消,返回APP。

Android开发要点说明#

1、后台设置
商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。设置界面在【开放平台】中的栏目【管理中心 / 修改应用 / 修改开发信息】里面,如图8.8红框内所示。
img
图8.8
应用包名:是在APP项目配置文件AndroidManifest.xml中声明的package值,例如DEMO中的package="net.sourceforge.simcpux"。
应用签名:根据项目的应用包名和编译使用的keystore,可由签名工具生成一个32位的md5串,在调试的手机上安装签名工具后,运行可生成应用签名串,如图8.9所示,绿色串即应用签名。点击下载签名生成工具
img
图8.9
2、注册APPID
商户APP工程中引入微信JAR包,调用API前,需要先向微信注册您的APPID,代码如下:
final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
// 将该app注册到微信
msgApi.registerApp("wxd930ea5d5a258f4f");
3、调起支付
商户服务器生成支付订单,先调用统一下单API(详见第7节)生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付。以下是调起微信支付的关键代码:
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= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";
api.sendReq(request);
注意:该sign生成字段名列表见调起支付API
4、支付结果回调
参考微信openSDK,在商户包名.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调),在WXPayEntryActivity类中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。代码示例如下:
**注意:**开发微信支付需要实现WXPayEntryActivity类,否则可能支付完成后,无法从微信内返回到商户APP。Android13开始Intent过滤器会屏蔽不匹配的intent,存在无法返回商户APP的问题,解决方法:在manifest中,去除WXPayEntryActivity的intent-filter。
<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:exported="true"
    android:taskAffinity="填写你的包名"
    android:launchMode="singleTask">
</activity>
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);
  	}
}
回调中errCode值列表:
名称描述解决方案
0成功展示成功页面
-1错误可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
-2用户取消无需处理。发生场景:用户不支付了,点击取消,返回APP。

鸿蒙开发要点说明#

1、配置鸿蒙应用信息
前往微信开放平台,在「管理中心 - 移动应用 - 详情 - 开发配置」中点击「编辑」进入修改开发信息的页面,继续在「平台信息」板块中填入鸿蒙应用所需的 Bundle ID 和 identifier 信息,然后提交审核,等待审核通过即可。
img
关于「鸿蒙应用」中的 Bundle ID、Identifier、以及应用下载地址的提供的说明如下:
Bundle ID 指的是鸿蒙应用的包名,详情可点击查看
Identifier 指的是鸿蒙应用的 appIdentifier,详情可点击查看
注意事项:
对于 App 已上架 Android 或iOS 应用市场的应用,千万别选择【未上架任何应用市场】,此选项意思是 Android、iOS 和鸿蒙都尚未上架应用市场,而未上架应用市场的应用使用微信能力则有如下的限制,因此开发者需谨慎操作
img
因此,对于 App 已上架 Android 或iOS 应用市场的应用,需选择【已上架至少一个应用市场】,但需填写 App 备案号
img
即,对于 Android 和 iOS 已上架的应用,在下面的配置中一定要选择【是】
img
2、下载鸿蒙开发的 IDE
前往鸿蒙官网下载 DevEco Studio NEXT
3、配置 sdk 依赖
在 DevEco Studio NEXT中打开你的项目,以 demo 工程为示例:
修改项目中的oh-package.json5文件,在dependencies中加入微信 opensdk 的依赖项:
{
  "name": "demo",
  "version": "1.0.0",
  "description": "Please describe the basic information.",
  "main": "",
  "author": "",
  "license": "",
   "dependencies": {
    "@tencent/wechat_open_sdk": "1.0.0"
  }
}
4、调起支付
商户服务器生成支付订单,先调用【统一下单API】生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付。以下是调起微信支付的关键代码:
import * as wxopensdk from '@wechat/open_sdk';

// WXApi 是第三方app和微信通信的openApi接口,其实例通过WXAPIFactory获取,需要传入应用申请到的AppID
export const WXApi = wxopensdk.WXAPIFactory.createWXAPI(APP_ID)

// WXApiEventHandler为微信数据的回调
class WXApiEventHandlerImpl implements wxopensdk.WXApiEventHandler {
  private onReqCallbacks: Map<OnWXReq, OnWXReq> = new Map
  private onRespCallbacks: Map<OnWXResp, OnWXResp> = new Map

  registerOnWXReqCallback(on: OnWXReq) {
    this.onReqCallbacks.set(on, on)
  }
  unregisterOnWXReqCallback(on: OnWXReq) {
    this.onReqCallbacks.delete(on)
  }

  registerOnWXRespCallback(on: OnWXResp) {
    this.onRespCallbacks.set(on, on)
  }
  unregisterOnWXRespCallback(on: OnWXResp) {
    this.onRespCallbacks.delete(on)
  }

  onReq(req: wxopensdk.BaseReq): void {
    Log.i(kTag, "onReq:%s", JSON.stringify(req))
    this.onReqCallbacks.forEach((on) => {
      on(req)
    })
  }

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

//调用支付
let req = new wxopensdk.PayReq
req.appId = 'wxd930ea5d5a258f4f'//微信开放平台审核通过的移动应用AppID
req.partnerId = '1900000109'//微信支付商户号
req.prepayId = '1101000000140415649af9fc314aa427'//调用微信支付下单接口返回的支付交易会话ID
req.packageValue = 'Sign=WXPay'//填写固定值Sign=WXPay
req.nonceStr = '1101000000140429eb40476f8896f4c9'//随机字符串,不长于32位
req.timeStamp = '1398746574'//时间戳
req.sign = '7FFECB600D7157C5AA49810D2D8F28BC2811827B'//签名值
// 向微信发送登录请求:
//   context为ohos内置类,app间跳转需依赖该类,开发者可在Component中获取
//   finished为跳转微信的结果:true表示跳转成功;false表示跳转失败,可能是因为微信未安装
let finished = await this.wxApi.sendReq(context: common.UIAbilityContext, req)


// 在EntryAbility中响应来自微信的回调
export default class EntryAbility extends UIAbility {
  onCreate(want: Want, _launchParam: AbilityConstant.LaunchParam): void {
    this.handleWeChatCallIfNeed(want)
  }
  
  onNewWant(want: Want, _launchParam: AbilityConstant.LaunchParam): void {
    this.handleWeChatCallIfNeed(want)
  }

  private handleWeChatCallIfNeed(want: Want) {
    WXApi.handleWant(want, WXEventHandler)
  }
}
注意该sign生成字段名列表见调起支付API
5、支付结果回调
支付完成后,微信App会返回到商户App并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码。如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意一定不能以客户端返回作为用户支付的结果,应以服务器端接收的支付通知或查询API返回的结果为准。
示例代码:
onResp(resp: wxopensdk.BaseResp): void {
Log.i(kTag, "onResp:%s", JSON.stringify(resp))
 this.onRespCallbacks.forEach((on) => {
 on(resp)
 })
 }
回调中errCode值列表:
值描述解决方案
0成功展示成功页面
-1错误可能的原因:签名错误、未注册AppID、项目设置AppID不正确、注册的AppID与设置的不匹配、其他异常等
-2用户取消无需处理。发生场景:用户不支付了,点击取消,返回App
修改于 2025-09-30 07:01:21
上一页
API详细说明
下一页
调起支付接口
Built with