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元,還換不到一個人性化的提示。

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章