微信支付的相關(guān)步驟

微信支付的相關(guān)步驟

1.前提準(zhǔn)備

??公司的要求是接入微信支付,但是之前沒怎么接觸,這里記錄下。申請注冊審核的步驟都已經(jīng)省略,這些工作,在項(xiàng)目開始的時(shí)候就需要開始進(jìn)行申請,因?yàn)槲⑿诺膶徍似诔措u長,而且這中間還可能回因?yàn)槟承┰虮痪堋K孕枰崆白龊脺?zhǔn)備。下面這些是步驟:

1.首先拿到你的AppId(這個(gè)值是申請成功了之后微信給你的);
2.下載demo,微信支付給你的demo,主要是拿到里面的包。就這兩個(gè)

準(zhǔn)備的安裝包

文件夾下wechat-sdk-android-with-mta-1.0.2.jar在開發(fā)聯(lián)調(diào)環(huán)境中使用。
3.你需要在你的app根文件目錄下,有這么一個(gè)文件目錄:

微信文件包

微信的要求,因?yàn)樗鼤詣釉谀愕母夸浵聶z索文件,也就是這個(gè)包。

4.在文件目錄下有這個(gè)一個(gè)文件,整個(gè)拷貝過來,這也是微信的要求整個(gè)拷貝過來。


3.png

2. 開發(fā)準(zhǔn)備

做好了基本的準(zhǔn)備功能,下面這里的是具體的調(diào)用步驟:
1.新建一個(gè)bean類,名字為WXPayBean.java。以我的項(xiàng)目為例子。(特別說一下,這里的參數(shù),是后臺哪邊返回的,具體的值,由后臺哪邊定,基本上就這么點(diǎn)。)

public class WXPayBean  implements Serializable {
 private String appid;
    private String mchId;
    private String nonceStr;
    private String prepayId;
    private String resultCode;
    private String returnCode;
    private String returnMsg;
    private String sign;
    private String timeStamp;
    private String tradeType;
    private  String packageValue;
public String getPackageValue() {
        return packageValue;
    }
    public void setPackageValue(String packageValue) {
        this.packageValue = packageValue;
    }
   public String getAppid() {
        return appid;
    }
   public void setAppid(String appid) {
        this.appid = appid;
    }

 public String getMchId() {
        return mchId;
    }
   public void setMchId(String mchId) {
        this.mchId = mchId;
    }
   public String getNonceStr() {
        return nonceStr;
    }
    public void setNonceStr(String nonceStr) {
        this.nonceStr = nonceStr;
    }
   public String getPrepayId() {
        return prepayId;
    }
   public void setPrepayId(String prepayId) {
        this.prepayId = prepayId;
    }
    public String getResultCode() {
        return resultCode;
    }
    public void setResultCode(String resultCode) {
        this.resultCode = resultCode;
    }
   public String getReturnCode() {
        return returnCode;
    }
   public void setReturnCode(String returnCode) {
        this.returnCode = returnCode;
    }
   public String getReturnMsg() {
        return returnMsg;
    }
   public void setReturnMsg(String returnMsg) {
        this.returnMsg = returnMsg;
    }
   public String getSign() {
        return sign;
    }
   public void setSign(String sign) {
        this.sign = sign;
    }
    public String getTimeStamp() {
        return timeStamp;
    }

    public void setTimeStamp(String timeStamp) {
        this.timeStamp = timeStamp;
    }
    public String getTradeType() {
        return tradeType;
    }
    public void setTradeType(String tradeType) {
        this.tradeType = tradeType;
    }
}
  1. 接下來,是請求后臺的接口,然后對后臺接口返回值進(jìn)行操作。這里是自己封裝的請求
    Ordernumber,是自己項(xiàng)目的訂單編號。
  final IWXAPI api = WXAPIFactory.createWXAPI(this, Constants.APP_ID,false);
 api.registerApp(Constants.APP_ID);  //將微信返回給你的AppId值帶進(jìn)去就好了。

onResponse 是請求成功以后返回的值。將object 的類型轉(zhuǎn)換為你之前見的bean類。
取出返回的數(shù)據(jù)。
appId,這個(gè)值可以自己取,也可以用之前的固定值
mchId 、這里注意下,微信的小坑。 你看微信的文檔時(shí)候,https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
在Api列表里面,統(tǒng)一下單和調(diào)起支付接口的請求參數(shù),都是商戶號,但是商戶號的值竟然不一樣。 Partnered 和mch_id

主要代碼就是這一點(diǎn):
PayReq  req = new PayReq();
 req.appId =appId;
 req.partnerId =mchId; 
 req.prepayId = prepayId; 
 req.nonceStr = nonceStr; 
 req.timeStamp=wxContent.getTimeStamp();
 req.sign = sign; 
 req.packageValue=wxContent.getPackageValue();
 api.sendReq(req); 

//微信支付
public void WXPay(String orderNumber) {
    final IWXAPI api = WXAPIFactory.createWXAPI(this, Constants.APP_ID,false); 
    api.registerApp(Constants.APP_ID); 
    HttpPostAsyn asyn=new HttpPostAsyn(ApiConfig.PATH_USER); 
    asyn.addParamters("action","unified_order");
    asyn.addParamters("body","項(xiàng)目名稱-"+categoryName); 
    asyn.addParamters("price",totalPrice+""); 
    asyn.addParamters("outtradeno",orderNumber); 
    asyn.addCallBack(new HttpCallBack() { 
    @Override 
    public void onFailure(CustomizException e) throws Exception { 
    @Override
    public void onResponse(Object object1) throws Exception {
      WXPayBean wxContent = (WXPayBean) object1; 
      if(wxContent!=null){ 
         String appId = wxContent.getAppid();
         String mchId = wxContent.getMchId(); 
         String prepayId = wxContent.getPrepayId(); 
         String nonceStr = wxContent.getNonceStr(); 
         String sign = wxContent.getSign(); 
         try { 
           PayReq req = new PayReq(); 
           req.appId =appId; 
           req.partnerId =mchId; 
           req.prepayId = prepayId; 
           req.nonceStr = nonceStr; 
           req.timeStamp=wxContent.getTimeStamp(); 
           req.sign = sign; req.packageValue=wxContent.getPackageValue(); 
           // Toast.makeText(mContext, "正常調(diào)起支付", Toast.LENGTH_SHORT).show(); 
           // 在支付之前,如果應(yīng)用沒有注冊到微信,應(yīng)該先調(diào)用IWXMsg.registerApp將應(yīng)用注冊到微信 api.sendReq(req); 
           } catch (Exception e) {
           e.printStackTrace(); 
           Log.e("tag", "異常:" + e.getMessage()); Toast.makeText(mContext, "異常:" + e.getMessage(), Toast.LENGTH_SHORT).show(); 
           } 
        } else {
              Toast.makeText(mContext, "服務(wù)器請求錯(cuò)誤", Toast.LENGTH_SHORT).show(); 
              } 
         } 
         }); 
         OkHttpUtil.HttpAsyn(asyn,WXPayBean.class); }

3.最后一步,準(zhǔn)備工作的時(shí)候有一個(gè)拷貝的Activity,WXPayEntryActivity.java ,還記得吧.(這個(gè)文件是為了接受第7步,api.sendReq(req); 發(fā)過來的數(shù)據(jù),根據(jù) resp.errCode的值,來確定你的下一步操作,只有是0的時(shí)候,才是正常的,其他的時(shí)候,都是非正常的。 )
添加判斷

@Override 
public void onResp(BaseResp resp) {
switch (resp.errCode){ 
case 0: 
//請求正常,進(jìn)行下一步的操作。。。。 
break; 
case -1:
UiHelper.Toast(this,"支付異常,請聯(lián)系商家"); 
break; case -2: 
UiHelper.Toast(this,"支付取消"); 
break; }
finish();
}

微信支付的一點(diǎn)小坑:

??微信文檔很簡單,錯(cuò)誤提示更少。文檔上這樣寫,一般-1的時(shí)候都是 簽名錯(cuò)誤、未注冊APPID、項(xiàng)目設(shè)置APPID不正確、注冊的APPID與設(shè)置的不匹配、其他異常等。這句話說的好籠統(tǒng),但是微信的文檔就是這樣,你需要一個(gè)個(gè)的檢查。出現(xiàn)問題,你會發(fā)瘋,不知道從何下手。
??之前我自己做的時(shí)候也出現(xiàn)了這種情況,這個(gè)時(shí)候千萬不要慌,慢慢檢查你的參數(shù):
1.檢查你的AppId值,這個(gè)值是在注冊的時(shí)候給你的,所以你要看看你是不是少了,或者錯(cuò)了。
2.檢查簽名,這里最需要注意了,一般加簽我們都是在后臺直接傳過來的,寫在App端加簽,不安全,和你的后臺好好去對對,多調(diào)試幾次。(我之前查了一晚上,四個(gè)多小時(shí),后面就是后臺加簽名傳錯(cuò)了某個(gè)值,然后出現(xiàn)-1.搞的我差點(diǎn)想打死那貨,莫名其妙被加了班,那貨下班就走了。想想都?xì)馊耍?br> 3.檢查你的代碼,一般我們在寫代碼的時(shí)候都是按照文檔上來的,這時(shí)候也不能馬虎,某個(gè)值的錯(cuò)誤可能會導(dǎo)致你前功盡棄。耐心點(diǎn)吧。

好了,到此結(jié)束。
最后祝你不要碰到坑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,996評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內(nèi)容