微信支付各種坑--終章(-1&-2)
標簽: 微信支付-2 微信支付-1 微信支付第一次失敗第二次成功 微信支付各種坑 微信支付最終解決篇
001.微信支付一路坑,走過一坑又一坑,總之,微信支付太過于坑爹,詳細大家也或多或少遇到過,一路艱辛終于完美繼承微信支付,下面進入填坑之路!!!
002.一些微信平臺的appid等這些就不多說了,自己去微信支付官網查看,錯誤碼如下:
回調中errCode值列表:
|
no01.去官網下載最新的sdk(必須)及demo,這個也會導致-1
no02.配置我們的WXPayEntryActivity
,該類必須放在包名.wxapi
下,比如com.weixin.test.wxapi.WXPayEntryActivity
,包名或類名不一致會造成無法回調,如下圖
切記配置清單文件,(不必配置其他信息,有些配置<intent-filter>這個是非必需的加不加都沒影響
),exported=true這個必須配置,不配置回調會出問題
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop">
no03.簽名問題,一定要用在微信開發平臺配置我們的app的正式簽名(即你發布的app的簽名,這個是必須),保證簽名一致仔細檢查,這個是-1常用問題,(可以用微信分享來驗證簽名正確與否,分享成功則說明簽名沒有問題,可往其他方向排查)
no04.我們和后臺的交互,集成微信分享很簡單,我們只需要拿到后臺返回的參數請求即可,但是必須謹慎小心,看清每一個鍵值對,包括后臺的2次簽名、加密等一些問題(ios成功基本后臺那邊就沒啥大問題了),參數不對微信支付回調失敗或者莫名的一些問題,微信支付核心代碼:
PayReq req = new PayReq(); try { req.appId = json.getString("appid"); req.partnerId = json.getString("partnerid"); req.prepayId = json.getString("prepayid"); req.nonceStr = json.getString("noncestr"); req.timeStamp = json.getString("timestamp"); req.packageValue = json.getString("package"); req.sign = json.getString("sign"); req.extData = "app data"; // optional // 在支付之前,如果應用沒有注冊到微信,應該先調用IWXMsg.registerApp將應用注冊到微信 api.registerApp(APP_ID);//你前面添加了就不必再次添加 api.sendReq(req); LogUtils.i(TAG, "掉微信支付,,,,,,,,"); } catch (JSONException e) { LogUtils.i(TAG, e.toString()); e.printStackTrace(); }
no05.回調界面的基本配置,一個模式cv即可(可以在回調中做一些我們自己的操作):
說明:* api.sendReq(req)后,不管微信的支付頁面有沒有調出來,最終都會來到這個WXPayEntryActivity頁面 ,在這個頁面,我們可以自己做一些事情,但是我這里就直接finish掉了*
public class WXPayEntryActivity extends BaseActivity implements IWXAPIEventHandler { private IWXAPI api; private static final String APP_ID = "你申請的ID"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wxpay_entry); LogUtils.i(TAG, "onCreate" + "支付回調執行"); api = WXAPIFactory.createWXAPI(this, APP_ID); api.handleIntent(getIntent(), this); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } @Override public void onReq(BaseReq baseReq) { LogUtils.i(TAG, "baseReq:" + baseReq.toString() + "00000000000"); } //支付結果回調 @Override public void onResp(BaseResp baseResp) { LogUtils.i(TAG, "支付回調執行"); if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { if (baseResp.errCode == 0) {
showToastLong("支付成功!");
Logi("baseReq:" + baseResp.errCode);} else { showToastLong("支付失敗,請重新嘗試!"); Logi("baseReq:" + baseResp.errCode); } finish(); } }}
no06.切勿欣喜,運氣好你的測試沒有問題,但是還有坑,慎之又慎啊!就是還有一種情況,那就是我們開發者用debug模式安裝到手機,然后跑了支付的功能,當然,這時候因為appId是用正式簽名MD5碼生成的,所以會返回 -1,然后你又換了個正式環境的,點破手機還是返回 -1 ,而且你確定之前正式包還是可以支付正常的,這時候你就蒙逼了,沒錯,這時候清下緩存這招就好使了或者卸載微信再安裝城了,這個-1困擾我很久啊,但是這個錯誤只是針對我們開發者而言,因為客戶不可能會安裝這個debug包的!
003.另外還有一種返回-2的情況就是我們在第一次點擊支付,支付失敗,沒有調起支付界面直接調了WXPayEntryActivity
,
返回-2,第二次點擊又支付成功了,,,,,一直這樣循環,那么檢查你是不是發送了2次請求,如果沒有那你就清理緩存或者卸載微信!
004.至此,微信支付的坑填平,歡迎大家討論學習!!!
智能推薦
manacher入門&amp;模板
點擊打開鏈接 Manacher算法 算法總結第三彈 manacher算法,前面講了兩個字符串相算法——kmp和拓展kmp,這次來還是來總結一個字符串算法,manacher算法,我習慣叫他 “馬拉車”算法。 相對于前面介紹的兩個算法,Manacher算法的應用范圍要狹窄得多,但是它的思想和拓展kmp算法有很多共通支出,所以在這里介紹一下。Manache...
[Tensorflow] Reader &amp;amp;amp;amp;amp; queue圖片讀取管道
背景:在訓練數據很大的情況下,無法將數據全部讀入內存。除了自己寫個工具處理,還可以使用tensorflow提供的工具。 一、流程 文件名集合,用list表示。 如["a.jpg","b.jpg"]; 文件名隊列。調用API tf.train.string_input_producer; 構建一個適合該文件格式的reader,如tf.W...
Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET&nbs
上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自動化發布和部署(1) 服務器版本 Ubuntu 16.04 LTS。 本篇博文目的:項目中添加Dockerfile文件,使用 CI 腳本構建自定義鏡像,推送到 Docker 私有倉庫,然后在服務器上拉取鏡像并創建相應容器,最后啟動容器,完成發布和部署。 實現上面目的,大概...
微信支付 app支付 簽名失敗,微信支付的坑,微信支付SDK demo bug
后面有源碼參考 1、sdk問題 下面是WXPayConfig,抽象方法是不帶修飾符的,只能同一包使用,我的配置怎么能在同一包下呢,坑, 改源碼:使用public 修飾 然后demo也是坑,實現抽象類,不知道誰寫的 改源碼:使用繼承 修改后 2、簽名問題-預支付 默認使用MD5,簽名不通過,要使用HMACSHA256 3、簽名問題-支付回調 巨坑 官方demo 老子怎么弄都是驗證失敗,...
微信支付遇到的坑 (掃碼支付)
官方下載sdk: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 我用的是thinkphp3.2, 單獨拎出來哥包online,在里面做的處理 在WxPay.Config.php配置好APPID,MCHID, 放置好KEY:商戶支付** 或者是直接放個路徑 自己程序做好處理之后,開始調用插件 注意:前方大坑來了 a、簽名一...
猜你喜歡
微信和支付寶支付爬坑記錄
一、微信支付 1 微信瀏覽器內部調起支付js代碼 注:jsApiParameters 必須是一個json 2 用戶授權授權 如圖所示 scope = snsapi_base 不彈出,直接獲取openid,但是實際上可能拿不到用戶的openid, 所以最好是將 scope=snsapi_user...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...