用 微信付款 提示: 微信统一下单接口和拉起支付的appid不一致 怎么办?

匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。微信统一下单
https://pay./wiki/doc/api/native.php?chapter=9_1统一下单
除被扫支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。
URL地址:https://api.mch./pay/unifiedorder
是否需要证书
公众账号ID
String(32)
wxd678efh567hg6787
微信分配的公众账号ID(企业号corpid即为此appId)
String(32)
微信支付分配的商户号
device_info
String(32)
终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"
随机字符串
String(32)
5K8264ILTKCH16CQ2502SI8ZNMTM67VS
随机字符串,不长于32位。推荐
String(32)
C380BEC2BFD727A4BF3AD6
签名,详见
String(128)
腾讯充值中心-QQ会员充值
商品简单描述,该字段须严格按照规范传递,具体请见
String(6000)
"goods_detail":[
"goods_id":"iphone6s_16G",
"wxpay_goods_id":"1001",
"goods_name":"iPhone6s 16G",
"goods_num":1,
"price":528800,
"goods_category":"123456",
"body":"苹果手机"
"goods_id":"iphone6s_32G",
"wxpay_goods_id":"1002",
"goods_name":"iPhone6s 32G",
"quantity":1,
"price":608800,
"goods_category":"123789",
"body":"苹果手机"
商品详细列表,使用Json格式,传输签名前请务必使用CDATA标签将JSON文本串保护起来。
goods_detail []:
└ goods_id String 必填 32 商品的编号
└ wxpay_goods_id String 可选 32 微信支付定义的统一商品编号
└ goods_name String 必填 256 商品名称
└ goods_num Int 必填 商品数量
└ price Int 必填 商品单价,单位为分
└ goods_category String 可选 32 商品类目ID
└ body String 可选 1000 商品描述信息
String(127)
附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
商户订单号
out_trade_no
String(32)
商户系统内部的订单号,32个字符内、可包含字母,&其他说明见
String(16)
符合ISO&4217标准的三位字母代码,默认人民币:CNY,其他值列表详见
订单总金额,单位为分,详见
spbill_create_ip
String(16)
123.12.12.123
APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。
交易起始时间
time_start
String(14)
订单生成时间,格式为yyyyMMddHHmmss,如日9点10分10秒表示为10。其他详见
交易结束时间
time_expire
String(14)
订单失效时间,格式为yyyyMMddHHmmss,如日9点10分10秒表示为10。其他详见注意:最短失效时间间隔必须大于5分钟
String(32)
商品标记,代金券或立减优惠功能的参数,说明详见
notify_url
String(256)
http://www./wxpay/pay.php
接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。
trade_type
String(16)
取值如下:JSAPI,NATIVE,APP,详细说明见
product_id
String(32)
trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。
指定支付方式
String(32)
no_credit--指定不能使用信用卡支付
String(128)
oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。openid如何获取,可参考【】。企业号请使用【】获取企业号内成员userid,再调用【】进行转换
举例如下:
&&&&appid&wx0ec43b&/appid&
&&&&attach&支付测试&/attach&
&&&&body&JSAPI支付测试&/body&
&&&&mch_id&&/mch_id&
&&&&detail&&![CDATA[{
"goods_detail":[
"goods_id":"iphone6s_16G",
"wxpay_goods_id":"1001",
"goods_name":"iPhone6s 16G",
"quantity":1,
"price":528800,
"goods_category":"123456",
"body":"苹果手机"
"goods_id":"iphone6s_32G",
"wxpay_goods_id":"1002",
"goods_name":"iPhone6s 32G",
"quantity":1,
"price":608800,
"goods_category":"123789",
"body":"苹果手机"
}]]&&/detail&
&&&&nonce_str&1add1a30ac87aa2db72f57a2375d8fec&/nonce_str&
&&&&notify_url&http://wxpay./pub_v2/pay/notify.v2.php&/notify_url&
&&&&openid&oUpF8uMuAJO_M2pxb1Q9zNjWeS6o&/openid&
&&&&out_trade_no&&/out_trade_no&
&&&&spbill_create_ip&14.23.150.211&/spbill_create_ip&
&&&&total_fee&1&/total_fee&
&&&&trade_type&JSAPI&/trade_type&
&&&&sign&0CBEFBCA001&/sign&
注:参数值用XML转义即可,CDATA标签用于说明数据不被XML解析器解析。
返回状态码
return_code
String(16)
SUCCESS/FAIL
此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
return_msg
String(128)
返回信息,如非空,为错误原因
参数格式校验错误
以下字段在return_code为SUCCESS的时候有返回
公众账号ID
String(32)
调用接口提交的公众账号ID
String(32)
调用接口提交的商户号
device_info
String(32)
调用接口提交的终端设备号,
随机字符串
String(32)
5K8264ILTKCH16CQ2502SI8ZNMTM67VS
微信返回的随机字符串
String(32)
C380BEC2BFD727A4BF3AD6
微信返回的签名,详见
result_code
String(16)
SUCCESS/FAIL
String(32)
SYSTEMERROR
详细参见第6节错误列表
错误代码描述
err_code_des
String(128)
错误返回的信息描述
以下字段在return_code&和result_code都为SUCCESS的时候有返回
trade_type
String(16)
调用接口提交的交易类型,取值如下:JSAPI,NATIVE,APP,详细说明见
预支付交易会话标识
String(64)
微信生成的预支付回话标识,用于后续接口调用中使用,该值有效期为2小时
二维码链接
String(64)
URl:weixin://wxpay/s/An4baqw
trade_type为NATIVE是有返回,可将该参数值生成二维码展示出来进行扫码支付
举例如下:
&&&&return_code&&![CDATA[SUCCESS]]&&/return_code&
&&&&return_msg&&![CDATA[OK]]&&/return_msg&
&&&&appid&&![CDATA[wx0ec43b]]&&/appid&
&&&&mch_id&&![CDATA[]]&&/mch_id&
&&&&nonce_str&&![CDATA[IITRi8Iabbblz1Jc]]&&/nonce_str&
&&&&sign&&![CDATA[EB8ED0CED72F]]&&/sign&
&&&&result_code&&![CDATA[SUCCESS]]&&/result_code&
&&&&prepay_id&&![CDATA[wx507cbf6ffd8b]]&&/prepay_id&
&&&&trade_type&&![CDATA[JSAPI]]&&/trade_type&
商户无此接口权限
商户未开通此接口权限
请商户前往申请此接口权限
用户帐号余额不足
用户帐号余额不足,请用户充值或更换支付卡后再支付
商户订单已支付
商户订单已支付,无需重复操作
商户订单已支付,无需更多操作
ORDERCLOSED
订单已关闭
当前订单已关闭,无法支付
当前订单已关闭,请重新下单
SYSTEMERROR
系统异常,请用相同参数重新调用
APPID_NOT_EXIST
APPID不存在
参数中缺少APPID
请检查APPID是否正确
MCHID_NOT_EXIST
MCHID不存在
参数中缺少MCHID
请检查MCHID是否正确
APPID_MCHID_NOT_MATCH
appid和mch_id不匹配
appid和mch_id不匹配
请确认appid和mch_id是否匹配
LACK_PARAMS
缺少必要的请求参数
请检查参数是否齐全
OUT_TRADE_NO_USED
商户订单号重复
同一笔交易不能多次提交
请核实商户订单号是否重复提交
参数签名结果不正确
请检查签名参数和方法是否都符合签名算法要求
XML_FORMAT_ERROR
XML格式错误
XML格式错误
请检查XML参数格式是否正确
REQUIRE_POST_METHOD
请使用post方法
未使用post传递参数&
请检查请求参数是否通过post方法提交
POST_DATA_EMPTY
post数据为空
post数据不能为空
请检查post数据是否为空
编码格式错误
未使用指定编码格式
请使用NOT_UTF8编码格式
馆藏&22149
TA的最新馆藏iOS微信支付的那些坑 - 简书
iOS微信支付的那些坑
一直以为支付宝的文档写的已经够烂了,后来我才发现我太年轻了,那是因为我还没有遇到微信的文档,简直坑爹。。。&心中一万只草泥马...&
支付业务流程
商户系统和微信支付系统主要交互说明:
步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【[统一下单API](https://pay./wiki/doc/api/app.php?chapter=9_1)】。
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay
步骤4:商户APP调起微信支付。api参见本章节【[app端开发步骤说明](https://pay./wiki/doc/api/app.php?chapter=8_5)】
步骤5:商户后台接收支付通知。api参见【[支付结果通知API](https://pay./wiki/doc/api/app.php?chapter=9_7)】
步骤6:商户后台查询支付结果。,api参见【[查询订单API](https://pay./wiki/doc/api/app.php?chapter=9_2)】
Paste_Image.png
1.微信支付现在已经很便捷了,提供了统一下单接口,自己的后台服务器调用该接口,获取prepayId2.最重要的一步,也是网上现在坑最多的一步,调用统一下单接口后,微信返回格式如下,而这么多数据中,真正对我们有用的只有 预支付订单号prepayId,微信返回的sign没有任何用,我们得根据签名规范重新生成签名(关于这点,上面的流程交互中就有提到),然后将重新生成的签名返回给APP端,用于APP端调用微信支付。(当然重新生成签名的步骤也可以放在APP端来做,不过为了安全考虑,建议放在服务端处理,下面也会给出APP端签名的代码)
调用统一下单接口 微信返回数据
一定要重新生成签名
很多人都遇到这样的问题,参数都处理好调用微信支付,结果进入微信界面后发现只有一个确定按钮,返回后错误码为 -2,造成这个原因的就是因为参数不对,而且大多是都是因为签名 sign 不对,没有进行二次签名,而直接拿微信返回的sign当作参数 , 所以调用微信支付接口时,一定要用 重新签名的sign!!!!
APP端调用支付时,sign不要用调用统一下单接口返回的sign,而要自己重新生成,生成规则见微信提供的签名生成算法
Paste_Image.png
相关代码如下:
APP端打开微信微信支付代码
#pragma mark -
- (void)wechatPay:(WechatOrderModel *)model
//调起微信支付 model 为自己服务器返回的参数
PayReq *req = [[PayReq alloc] init];
req.partnerId = model.
req.prepayId = model.
req.nonceStr = model.
req.timeStamp = model.timestamp.intV
req.package = model.
req.sign = model.//sign 为自己服务器获取到预支付订单号prepayId后,重新生成的签名,当然本地也可以生成签名,签名代码如下
[WXApi sendReq:req];
//日志输出
NSLog(@"微信支付请求参数 =====
appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",model.appid,req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign);
APP端重新生成签名(建议放在服务端处理)
#pragma mark -
微信支付本地签名
//创建发起支付时的sign签名
-(NSString *)createMD5SingForPayWithAppID:(NSString *)appid_key partnerid:(NSString *)partnerid_key prepayid:(NSString *)prepayid_key package:(NSString *)package_key noncestr:(NSString *)noncestr_key timestamp:(UInt32)timestamp_key{
NSMutableDictionary *signParams = [NSMutableDictionary dictionary];
[signParams setObject:appid_key forKey:@"appid"];//微信appid 例如wxfb2
[signParams setObject:noncestr_key forKey:@"noncestr"];//随机字符串
[signParams setObject:package_key forKey:@"package"];//扩展字段
参数为 Sign=WXPay
[signParams setObject:partnerid_key forKey:@"partnerid"];//商户账号
[signParams setObject:prepayid_key forKey:@"prepayid"];//此处为统一下单接口返回的预支付订单号
[signParams setObject:[NSString stringWithFormat:@"%u",timestamp_key] forKey:@"timestamp"];//时间戳
NSMutableString *contentString
=[NSMutableString string];
NSArray *keys = [signParams allKeys];
//按字母顺序排序
NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2 options:NSNumericSearch];
//拼接字符串
for (NSString *categoryId in sortedArray) {
![[signParams objectForKey:categoryId] isEqualToString:@""]
&& ![[signParams objectForKey:categoryId] isEqualToString:@"sign"]
&& ![[signParams objectForKey:categoryId] isEqualToString:@"key"]
[contentString appendFormat:@"%@=%@&", categoryId, [signParams objectForKey:categoryId]];
//添加商户密钥key字段
[contentString appendFormat:@"key=%@", @"商户密钥"];
NSString *result = [contentString md5String];//md5加密
MD5 加密方法
@return 加密后字符串
- (NSString *)md5String
if(self == nil || [self length] == 0)
unsigned char digest[CC_MD5_DIGEST_LENGTH],
CC_MD5([self UTF8String], (int)[self lengthOfBytesUsingEncoding:NSUTF8StringEncoding], digest);
NSMutableString *ms = [NSMutableString string];
for(i=0;i&CC_MD5_DIGEST_LENGTH;i++)
[ms appendFormat: @"%02x", (int)(digest[i])];
return [ms copy];
至此微信集成结束,坑的地方就是 app端调用微信支付时的签名参数sign一定要重新生成,不要使用统一下单接口返回的sign,切记!!!!
记录点滴,与君共勉。请登陆后使用
只需一步,快速开始
请完成以下验证码
请完成以下验证码
吧友自助信息发布区,请自行甄别
查看: 7452|回复: 5
购买微信电影票提示下单帐号跟支付帐号不符合,怎么破
购买微信电影票支付的时候提示下单帐号跟支付帐号不符合,怎么破
还有这种奇葩的提示吗??最近好久没有在微信上买票了。。贵死
怎么个意思?手机号要统一?
怎么个意思?手机号要统一?
我的帐号也是,怎么回事
微信清缓存!
Powered byAPP支付常见开发问题选择字号:
APP支付又称移动端支付,是商户通过在移动端应用APP中集成开放SDK调起微信支付模块完成支付的模式。
错误返回“-1”
开放平台配置的报名和应用签名是否一致:(android);确认是否使用正式的keystore打包apk并安装调试;(android);提交订单部分需要在服务器端完成。
下单报{"errcode":,"errmsg":""}
Package数据MD5签名错误,请参照文档检查。
下单报"1001"错误
package里缺少必要参数;金额类型为证书,单位是分。
android签名正常,ios签名错误
需要注意body如果是中文,需要编码,编码格式统一为“UTF-8”。
请求prepayid发生错误:errcode":,"errmsg
请将商户的APPID和商户号以及报错截图发送至,进行深入了解。
支付返回报错::"errcode":,"errmsg":"您已完成交易接口升级,老接口交易权限已关闭,请使用新接口进行交易。如有疑问请联系微信支付客服咨询"
请将商户的APPID和商户号以及报错截图发送至,进行深入了解。
支付无法调起
请检查开放平台配置的包名和签名是否跟你的APK安装后的包名签名一致,一致才会调用的。
需要V3版的app支付服务端demo,因获取prepayId失败,找不到app_key
新版的微信支付是没有这个参数的,请查看最新版文档。
请求prepayid发生错误:信息[{"errcode":,"errmsg":"鎮ㄥ凡瀹屾垚浜ゆ槗鎺ュ彛鍗囩骇锛岃 鎺ュ彛浜ゆ槗鏉冮檺宸插叧闂?紝璇蜂娇鐢ㄦ柊鎺ュ彛杩涜?浜ゆ槗銆傚?鏈夌枒闂??鑱旂郴寰?俊鏀?粯瀹㈡湇鍜ㄨ?"}]
请将商户的APPID和商户号以及报错截图发送至,进行深入了解。
支付授权地址没有经过ICP验证
域名需要是英文备案域名方可。(此情况针对备案域名中包含中文字符或其他)
根据文档下订单,调用微信支付失败。调用微信支付的时候,微信为登录状态则无反应;微信未登录状态,会调用微信登录界面。
请将商户的APPID和商户号以及报错截图+请求参数详情,发送至,进行深入了解。
ios系统:订单成功,无法跳转到支付界面
支付结果报错:errStr=null,code=-1
请检查开放平台配置的包名和签名是否跟APK安装后的包名签名一致,一致才会调用的。
都适用与哪些场景?展开收起
以上信息是否已解决您的问题?
关注微信公众号
关注手Q公众号
社交软件热线3
帐号服务热线6
财付通热线0
支付服务热线95017
目前仅提供以上业务的电话服务,其他产品请在本网站寻求帮助
微信端公众号
QQ端公众号

我要回帖

更多关于 微信统一下单接口 的文章

 

随机推荐