講道理缆镣,微信支付確實(shí)做過好多次了踊兜。但是我卻沒有正八經(jīng)的梳理過流程
最近算是被坑了。在次記錄
- 微信開發(fā)者平臺申請appId ,這個無需多言芭碍。
- 在 .wxapi包下放入 WXPayEntryActivity.class;用來接收回調(diào)結(jié)果徒役,別忘了在AndroidManifest清單文件中注冊 。
- 調(diào)起支付接口:
首先第一點(diǎn)窖壕,將價(jià)格和ip傳給服務(wù)器忧勿。獲取服務(wù)器返回的一系列值 :
appId、partnerId瞻讽、prepayId鸳吸、nonceStr、timeStamp速勇、
packageValue為固定值 “Sign=WXPay”晌砾;
我的坑就是在接下來,因?yàn)槲覀冞€要向服務(wù)器傳遞一個sign .然后這個sign值是需要將之前的幾個值拼起來烦磁,然后在和商戶秘鑰拼接起來养匈,我們一起的做法都是服務(wù)器拼接起來,返給我們?nèi)缓笾苯觽鬟f給微信都伪。然而這一次我卻栽在了這里呕乎,我這邊這個后臺是個新手,而且你說話他都隨便應(yīng)付你陨晶。我反復(fù)問他sign是不是猬仁,拼接起來的。他說是。然后我就沒有多管湿刽,然而就是調(diào)不起微信支付的烁。然后我自己也拼接了一遍。確實(shí)也沒調(diào)起來叭爱。后來我重啟手機(jī)撮躁,又調(diào)用了一次。成功了买雾。然后在問后臺,他又給我說他以為微信服務(wù)器給拼接了杨帽。
無語中啊漓穿。。注盈。晃危。
其實(shí)支付的大部分功能都在服務(wù)器端。后臺把我們的數(shù)據(jù)提交給微信服務(wù)器老客, 還是需要在把數(shù)據(jù)拼接一個sign前面的僚饭。
終端需要注意的 :
1 .核對是否是打包好的簽名 和我們填寫的包名
2. appId 注意是否寫正確了
3. WXPayEntryActivity.class的位置。一定是在 .wxapi包下胧砰。
4. 別忘了在清單文件中注冊回調(diào)activity
5. 這個sign簽名鳍鸵,我是在再不用后臺給我拼了。自己搞
調(diào)起支付及sing拼接代碼
IWXAPI api = WXAPIFactory.createWXAPI(this, "***********", false);
api.registerApp("***********");
WxEntity.DataBean data = wxEntity.getData();
PayReq payReq = new PayReq();
payReq.appId = data.getAppId();
payReq.partnerId = data.getMchId();
payReq.prepayId = data.getPrePayId();
payReq.nonceStr = data.getNonceStr();
payReq.timeStamp = data.getTimestamp();
payReq.packageValue = "Sign=WXPay";
// payReq.sign = data.getSign();
String stringA =
"appid=" + data.getAppId()
+ "&noncestr=" + data.getNonceStr()
+ "&package=" + "Sign=WXPay"
+ "&partnerid=" + data.getMchId()
+ "&prepayid=" + data.getPrePayId()
+ "×tamp=" + data.getTimestamp();
String stringSignTemp = stringA + "&key=" + "aqkdlpondbzSkpNdopMMqaHJKLpoKjLm";
String sign = MD5.getMessageDigest(stringSignTemp.getBytes()).toUpperCase();
Log.i("Sign-->", sign);
payReq.sign = sign;
api.sendReq(payReq);
WXPayEntryActivity .class
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";
private IWXAPI api;
public static final int ERRCODE_OK = 0; //支付成功的返回碼
public static final int ERRCODE_NO = -1; //支付失敗的
public static final int ERRCODE_CANCEL = -2; //用戶取消支付
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_result);
//這里填寫自己的APPID
api = WXAPIFactory.createWXAPI(this, "wxb872a94f23cc21a0");
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq req) {
}
@Override
public void onResp(BaseResp resp) {
//在這個方法中接收回調(diào)
Log.i("TAG", "PayResult-->" + resp.errCode);
String s = "";
switch (resp.errCode) {
case ERRCODE_OK://支付成功的返回碼
EventBus.getDefault().post(new WxPaySuccessEntity(true));
break;
case ERRCODE_NO: //支付失敗的
s = "支付失敗";
break;
case ERRCODE_CANCEL://用戶取消支付
s = "取消支付";
break;
}
// BxUtil.showMessage(WXPayEntryActivity.this, s);
finish();
}
}