Xamarin 使用微信支付的那些坑(Android)

一直使用.net 作为优先开发平台,做APP当然使用了xamarin 了。

最头痛的是ios 涉及的充值或APP功能上的必须使用inPay ,然后android 在国内使用不了inPay 只能使用支付宝和微信支付。

总算把支付宝了和ios的inPay搞掂,WeChat 申请商户号、开发者平台,各样申请各样认证,商户号用了300,开发者认证用了300。本人觉得非常坑,同样的认证类型内容也一样,就是帐号不一样,开发者平台又不能用商户的登录帐号,需要使用新的。明坑钱,结构上乱七八的,微信商户平台、开发者平台、公众号平台。 又没有SSO(单点登录),如果说我个人认为的专业角度,真是烂,或者这样才能多收点钱吧。然后开发者平台的APPID和公众号的APPID很容易让初学者搞晕,商户号又要绑定开发者平台的APPID,开发者平台APP又要审核(7个工作日),然后申请支付,认证(也要1-2个工作日),认证后绑定,然后再在商户平台,打开支付权限,这里APP再次审核(1-3工作日)。这样一来半个月没了。

正所谓一个拳头产品养全家,微信遍及性让国内开发者必选,如果非必选我反喜欢支付宝了。

废话说完了,说一下坑:

xamarin 绑定最新的sdk.已经编译好DLL,jar的绑定库非常简单,网上搜一下就有。

附上下载:https://download.csdn.net/download/Jockey/12411683

APP微信支付需要用到“统一支付下单”,这个容易理解,就是不管APP,WEB,小程序,公众号,都用到这个预支付订单API。

C#引用一个官方的SDK,然后简单修改一下APPID,商用ID,apiKey,和密钥。然后调用签名方法,post申请后顺利产生订单数据。

返回的数据,然后用到如下信息

public static string SecSign(string prepayid, string noncestr,string timestamp)
        {
            //二次签名
            Dictionary<string, string> parameters1 = new Dictionary<string, string>();
            parameters1.Add("appid", AppId);//开发者平台的APPID
            parameters1.Add("partnerid", PartnerId);//商户ID
            parameters1.Add("prepayid", prepayid);//刚才生成的预付订单的ID
            parameters1.Add("noncestr", noncestr);//刚才请求预付订单的随机值(不能新产生的)
            parameters1.Add("timestamp", timestamp);//时间截
            parameters1.Add("package", "Sign=WXPay");
            string content = GetSignContent(parameters1);
            //,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
            //stringSignTemp=stringA+"&key=192006250b4c09247ec02edce69f6a2d" //注:key为商户平台设置的密钥key 
            string signResult =Xamarin.AppFramework.Helpers.CryptHelper.GetMD5(content + "&key=" + outkey).ToUpper();
            return signResult;
        }

注意这里使用的是MD5签名。

然后直接

bool torf = wxApi.SendReq(payReq);  

这里调用返回是 true 

,然后在回调类中

public void OnResp(BaseResp resp)
        {
            int rel=  resp.MyErrCode;//返回-1
}
        

查了网上大量资料,

1、appid 和商户ID设置错误

2、APIKEY 设置错误

3、NonceStr要与申请预支付时一致

4、包名和签名错误(开发者平台可以查看和修改)

5、微信支付第一次签名错误后缓存后,缓存未清一直使用错误的签名。

我查了一下,原来我提交开发者平台审核时使用提发布包,所以签名错误了,改回来。重试。

还是-1,。。。。呢玛。。。

难道旧缓存问题,好吧,先备份好聊天记录。备份时睡觉了不管明天处理。。

把微信删除了。

重装微信后,重试。

还是返回-1

。。。。。。。反复检查各项会不会有错误,也调试节几次,不见有什么犯错。

唉。。。还是看一下官方的文档,从统一下单API,看到APP呼出API,终于看到了问题了,

官方还好心用红色字。

查了一下,我预支付的签名是用sha256的(引用微信官方的SDK)。然后支付调用代码使用的是MD5,我靠。吐血。

因为自己太懒了,就找网上的代码修改后使用。怪自己大意。

改回用sha256做签名,成功调用。

以上代码参考:https://blog.csdn.net/qq_21121397/article/details/89308563

如果你请求预支付订单时不是使用MD5的,一定要改回来。

要不是让你查一整天。

微信后端不能人性化一点吗?不要只返回一个-1,根据sha256和md5生成的签名长度都不一样,返回时不能提醒:请检查预支付签名与APP支付签名类型是否一致。这是花了600元,还换不到一个人性化的提示。

猜你喜欢

转载自blog.csdn.net/Jockey/article/details/106074323