全新微信支付APIv3接口规则(opensnew)(私钥)
发表时间:2023-11-29 09:06:30
文章来源:炫佑科技
浏览次数:122
菏泽炫佑科技
全新微信支付APIv3接口规则(opensnew)(私钥)
为了在保证支付安全的同时,为商户提供简单、一致、易用的开发体验,我们推出了全新的微信支付APIv3接口。 该版本API的具体规则请参考APIv3接口规则。
2、开发准备 2.1. 设置和配置开发环境
为了帮助开发者调用开放接口,我们提供了JAVA、PHP、GO三种语言的开发库,封装了签名生成、签名验证、敏感信息加解密、媒体文件上传等基本功能(更多语言版本)开发库将在不久的将来提供)。
测试步骤:
1.根据自己的开发语言,选择对应的开发库并构建项目。 具体配置请参考下面链接中的详细说明:
-php (opens new) (推荐), -- (opens new),适合PHP开发者。 -go (opens new),适合Go开发者。
更多资源可以在微信支付开发者社区(opens new)中搜索。
2. 创建加载商户私钥、加载平台证书、初始化的通用方法。
示例代码
3. 根据接口示例代码,替换请求参数后即可发起测试。
阐明:
签名生成 签名验证 敏感信息加解密(私钥)(平台证书)(V3密钥) 2.2. 业务开发配置 2.2.1. 注册应用程序
App接入微信支付,需要先在微信开放平台注册商户App,并注册App开发参数,生成AppID。 具体步骤如下:
登录微信开放平台(打开新),进入【管理中心→移动应用→创建移动应用】;
完成基本信息录入后,商户需要在此步骤提交App对应的下载地址、App官网、App水印、图标等业务信息;
完成平台信息录入,商户需要在这一步提交App和iOS端对应的开发参数,包括iOS端应用的包名、应用签名、ID、链接等;
以上信息全部提交后,App注册完成。 商户可以在【管理中心→移动应用】中选择具体应用,查看其AppID及获取的接口能力;
获取应用的AppID后,您需要将该AppID与商户支付进行绑定。 商户可以登录商户平台,进入【产品中心->AppID账户管理】界面进行AppID的绑定和管理。 界面如图所示。 展示:
2.2.2. iOS开发要点
由于苹果在iOS13系统中取消了查询App的能力,因此微信无法保证授权凭据能够正确返回给AppID对应的应用程序。 为此app开发,微信支付强烈要求所有商户尽快升级至.8.6,并让用户及时更新App,否则安全风险将始终存在。 谢谢您的合作!
详细升级说明请参见:升级指南(opens new)
注意
升级后,请务必按照文档要求完成验证工作,以确保升级成功。
下面以项目开发环境以.0、运行环境为IOS7.0为例来说明其开发时所需的操作。
1.项目设置AppID
商户申请在微信开放平台开发App应用后,微信开放平台会生成该App的唯一标识符AppID。 在Xcode中打开项目,将项目属性中的URL设置为你的AppID。如图图标红色位置所示
2、注册AppID
商户App项目中引入微信lib库和头文件。 调用API之前,您需要向微信注册您的AppID。 代码如下:
[WXApi:@"":@"演示2.0"];
注意
前端支付发起及SDK回调说明请参见发起支付说明(另开)
2.2.3. 开发要点1.后台设置
商户申请在微信开放平台开发应用后,微信开放平台会生成该App的唯一标识符AppID。 由于需要保证支付安全,需要将商户应用包名和应用签名与开放平台进行绑定,设置好后才能正常发起支付。 设置界面在【开放平台】中的【管理中心/修改应用/修改开发信息】栏中,如图红框所示。
应用包名:是App工程配置文件.xml中声明的值,如上图中的“”。
应用签名:根据项目的应用包名称和编译用途,签名工具可以生成32位md5字符串。 在被调试手机上安装签名工具后,运行即可生成应用签名字符串,如图8.9所示,绿色字符串为Apply签名。
点击下载签名生成工具(opens new)
2、注册AppID
商户App项目引入微信JAR包。 调用API之前,您需要向微信注册您的AppID。 代码如下:
1final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);2// 将该app注册到微信3msgApi.registerApp("wxd930ea5d5a258f4f");
注意
前端支付发起及SDK回调说明请参见发起支付说明(另开)
3. 快速访问 3.1. 业务流程图
关键步骤:
第三步:用户下单发起支付,商户可以通过微信支付App订单接口创建支付订单。
商户调用App下单接口后,会有正常返回和异常返回两种情况:
步骤8:商户通过App激活微信支付,并发起支付请求。 有关发起付款的详细说明,请参阅说明。
步骤15-19:用户支付成功后,商户可以通过以下两种方式获取订单状态。
我们通过以下接口通知商户系统用户确认订单信息回调:
方式一:付款结果通知。 用户支付成功后,微信支付会将支付成功结果以回调通知的形式同步给商户。 调用App的订单接口时,需要参数传入商户的回调地址。
方式二:当因网络抖动或问题而无法收到回调通知时,商户也可以主动调用查询订单接口获取订单状态。
3.2. API访问(包括示例代码)
文档展示了如何使用微信支付服务器SDK快速接入支付并完成与微信支付的接口。
注意
3.2.1. [服务器] 应用程序订购
步骤描述:用户在商户App中完成商户选择后,进入支付页面。 商户需要通过后台请求App的订单接口获取预付款ID。
示例代码
重要输入说明:
更多参数、响应详情和错误码请参考App订购API接口文档。
3.2.2. [客户] 电话付款
步骤说明:通过App点餐接口成功获取预付款交易 ID()后,需要调用微信支付收银台
SDK调用需要携带签名(签名涉及的参数有:AppID,,,,,,,参数区分大小写)
重要输入说明:
生成规则、响应详情和错误码请参考App支付接口文档。
iOS SDK调用说明 1.发起支付
商户服务器生成支付订单,首先调用App的订单API生成预付费订单,获取后重新签名并传输参数给App发起支付。 以下是激活微信支付的关键代码:
1PayReq *request = [[[PayReq alloc] init] autorelease];2request.partnerId = @"10000100";3request.prepayId= @"1101000000140415649af9fc314aa427";4request.package = @"Sign=WXPay";5request.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";6request.timeStamp= @"1397527777";7request.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";8[WXApi sendReq:request]
注意
该标志生成的字段名称列表如调用支付接口所示。
2. SDK结果回调
根据微信SDK,该类实现了该功能。 支付完成后,微信App会返回商户App并回调该函数。 开发者需要在该函数中接收通知并判断返回的错误码。 如果支付成功,则到后台查询支付结果,然后显示用户的实际支付结果。 注意,客户端返回的结果不得作为用户的支付。 以服务器收到的支付通知或查询接口返回的结果为准。
代码示例如下:
1-(void)onResp:(BaseResp*)resp{2if ([respisKindOfClass:[PayRespclass]]){3 PayResp*response=(PayResp*)resp;4 switch(response.errCode){5 caseWXSuccess: //服务器端查询支付通知或查询API返回的结果再提示成功6 NSlog(@"支付成功");7 break;8 default:9 NSlog(@"支付失败,retcode=%d",resp.errCode);10 break;11 }12 }13}
回调中的值列表:
名称描述解决方案
-2
用户取消
无需处理。 场景:用户未付款,点击取消,返回App。
成功
显示成功页面
-1
错误
可能原因:签名错误、未注册AppID、项目设置AppID不正确、注册AppID与设置的不匹配、其他异常等。
SDK调用说明 1. SDK发起支付
商户服务器生成支付订单,首先调用App的订单API生成预付费订单,获取后重新签名并传输参数给App发起支付。 以下是激活微信支付的关键代码:
1IWXAPI api;2 PayReq request = new PayReq();3 request.appId = "wxd930ea5d5a258f4f";4 request.partnerId = "1900000109";5 request.prepayId= "1101000000140415649af9fc314aa427",;6 request.packageValue = "Sign=WXPay";7 request.nonceStr= "1101000000140429eb40476f8896f4c9";8 request.timeStamp= "1398746574";9 request.sign= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";10 api.sendReq(request);
注意
该标志生成的字段名称列表如调用支付接口所示。
2.支付结果回调
参考微信SDK,实现net...wxapi包路径中的类(包名或类名不一致会导致回调失败),实现类中的功能,支付完成后微信App会返回商户App并回调该函数。 开发 用户需要在该函数中接收通知并判断返回的错误码。 如果支付成功全新微信支付APIv3接口规则(opensnew)(私钥),则到后台查询支付结果,然后显示用户的实际支付结果。 注意,客户端返回的结果不得作为用户的支付。 以服务器收到的支付通知或查询接口返回的结果为准。
代码示例如下:
1public void onResp(BaseRespresp){2 if(resp.getType()==ConstantsAPI.COMMAND_PAY_BY_WX){3 Log.d(TAG,"onPayFinish,errCode="+resp.errCode);4 AlertDialog.Builderbuilder=newAlertDialog.Builder(this);5 builder.setTitle(R.string.app_tip);6 }7}
回调中的值列表:
名称描述解决方案
成功
显示成功页面
-1
错误
可能原因:签名错误、未注册AppID、项目设置AppID不正确、注册AppID与设置的不匹配、其他异常等。
-2
用户取消
无需处理。 场景:用户未付款,点击取消,返回App。
3.2.3. [服务器]接收支付结果通知
步骤描述:当用户完成支付后,微信会通过异步回调的方式通知商户相关支付结果。 商户需要按照文档规范接收处理并返回响应。
注意
特别提醒:商户系统必须对结果通知的内容进行签名验证,并验证通知中的信息与商户侧的信息是否一致,防止数据泄露造成“虚假通知”和财务损失。
更多参数、响应详情和错误码请参考支付结果通知接口文档。
3.2.4. [服务器]查询订单
步骤描述:当商户后台、网络、服务器等出现异常,商户系统未收到支付通知时,商户可以通过订单查询接口验证订单支付状态。
注意
可以通过微信支付订单号和商户订单号查询订单。 两种查询方法返回相同的结果。
需要调用查询接口的情况:
示例代码(微信订单号查询):
示例代码
更多参数、响应详情及错误码请参考微信支付订单号/商户订单号接口文档。
3.2.5. [服务器]关闭订单
步骤描述:当商户订单支付失败时,需要生成新的订单号才能重新发起支付。 下单后必须调用关闭原订单号,避免重复付款。 系统下单后,用户付款超时,系统退出,不再接受,阻止用户继续。 请调用自定义订单接口
注意
示例代码
更多参数、响应详情及错误码请参考平仓订单接口文档。
3.2.6. [服务器]申请交易账单
步骤说明:微信支付每天都会提供交易账单文件,商户可以通过该接口获取账单文件的下载地址。
示例代码
更多参数、响应详情及错误码请参见交易账单支付通知API接口文档
3.2.7. [服务器]下载账单
步骤描述:通过应用交易账单接口获取账单下载地址()后,通过该接口获取对应的账单文件。 该文件包含金额、时间、营销等交易相关信息,供商户查询订单、退款、银行账户到账等。
注意
示例代码
更多参数、响应详情和错误码请参见下载缴费通知API接口文档。
4.常见问题 问:前端启动时微信支付返回=-1如何排查?
答:请根据以下几点进行检查:
调用SDK前检查App返回的订单参数是否正常,是否获取到正确的订单参数;
检查调用SDK签名是否正确,请注意以下几点:
客户端调用()时检查对象赋值的正确性(必要时要求商家提供数据)。 如果后台数据是异步获取的,例如,数据对象是通过异步请求获取的对象:.AppID = data.AppID; 实际的AppID属性值为空;
检查对应的开发配置,包括iOS AppID配置、包名和包签名设置。
Q:App调用“调用支付接口”返回:商户支付订单ID不合法。
A:请确认支付参数字段名称与文档中是否一致。
Q:服务商模式下,调用App下单接口时,返回“特殊子商户商品权限未授权”。
A:应用支付需要单独授权才可以使用。 请前往服务商平台子商户管理找到对应子商户授权服务商App支付权限。
Q:调用App点餐接口时,返回“不匹配”。
A:调用App下单接口前,需要确保子商户号与子商户App的AppID存在绑定关系。 请前往服务商平台子商户管理页面进行绑定操作。