WebsiteDdesign

网站设计

028微信开发 > 资讯 > 028微信开发:APP支付“签名错误”?
联系我们

028微信开发:APP支付“签名错误”?

来源:028微信开发 | 2016-12-07

微信接口的开放对于微信开发者来说的确是有极大的裨益,但是作为爱好微信开发的开发者来说在开发过程中遇到问题是在所难免的。028微信开发就微信支付中APP支付遇到的问题做一些细致的讲解。

 

作为开发者应该都知道微信支付包含刷卡支付、公众号支付、扫码支付、APP支付几种类型。

 

20151216180349_9127.png



在做微信APP支付时(即在APP中集成微信SDK),首先需要开发者在微信开放平台申请。通过审核之后,则会得到一些接口开发中需要的东西,如图。



20151216175455_5986.png



其中APP_ID 是在开放平台上绑定APP成功后所提供的,MCH_ID是申请APP支付功能通过之后提供的。而其中最关键的API_KEY,是用来签名的,即商户密钥,是在商户平台上自己设置的一个32位数字和英文字母组成的密钥,在API安全中可以找到设置的地方。

 

微信支付要签两次名,第一次是生成预支付订单,第二次是用预支付订单去调起微信支付。注意签名的数据字段一定要符合要求,比如必须有的不能少,非必要的如果写上去了就不能为空,拼接的顺序必须按字母顺序(ppid→body→mch_id→nonce_str)来,如下图。

 


20151216175518_1899.png



注意,当在body中写的参数是中文时(参数里一旦出现中文),在第一步生成预支付订单就不会成功,永远返回“签名错误”。这其实是编码问题,只需要统一编码为“UTF-8”就可以了。不要去单独将body的内容改为“UTF-8”编码,像这样:

 


20151216175533_7748.png



注意,这里是直接将签名之后,genPackageSign(packageParams)这个方法就是将参数签名,然后通过toXml(packageParams)拼接成XML格式,最后将得到的xmlstring用new String(xmlstring.getBytes("UTF-8"),"ISO-8859-1"); 处理之后再去请求预支付订单,就不会出现签名错误的问题了。

 

还需要注意一点,应用的签名和包名一定要和在微信开放平台绑定的签名、包名一致,否则也会出现“签名错误”或无法完成支付。