Android微信支付接入集成步骤

这两天,公司APP需要做商城,所以需要接入支付功能。看了一下微信的官方文档,大概知道了流程。首先由服务端集成。集成完之后,客户端这边请求接口,会返回相应的字段,然后客户端拿着这些字段调起微信支付,完成支付。
首先添加微信的依赖
compile'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.1.6'
然后,把demo里的payactivity拷贝过来。下面解释一下payactivity里的代码。

//把APP注册到微信
api= WXAPIFactory.createWXAPI(this,"APPID");
api.registerApp("APPID");
private voidpay() {
String url ="your servlet";
Button payBtn = (Button) findViewById(R.id.appay_btn);
payBtn.setEnabled(false);
Toast.makeText(PayActivity.this,"获取订单中...", Toast.LENGTH_SHORT).show();
try{
byte[] buf = Util.httpGet(url);
if(buf !=null&& buf.length>0) {
String content =newString(buf);
Log.e("get server pay params:",content);
JSONObject json =newJSONObject(content);
if(null!= json && !json.has("retcode") ){
PayReq req =newPayReq();
//req.appId = "wxf8b4f85f3a794e77";  // 测试用appId
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
Toast.makeText(PayActivity.this,"正常调起支付", Toast.LENGTH_SHORT).show();
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
booleanb =api.sendReq(req);
}else{
Toast.makeText(PayActivity.this,"返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(PayActivity.this,"服务器请求错误", Toast.LENGTH_SHORT).show();
}
}catch(Exception e){
Toast.makeText(PayActivity.this,"异常:"+e.getMessage(), Toast.LENGTH_SHORT).show();
}
payBtn.setEnabled(true);
}

这个方法就是微信Demo里,payactivity里主要的代码了。这里解释一下代码,url就是服务端集成完之后,给客户端调用的接口地址。会返回appId,parpayId.....拿到这些值给PayReq赋值,然后调用api.sendReq()调起支付。解释完代码,说一下可能遇到的问题。这些返回的参数,服务端是需要进行MD5加密的,如果没有加密,那么客户端拿到这些参数就需要进行加密。,
成功调起微信支付后,会跳转到一个界面,这个界面是必须有的,而且必须在wxapi包下。相信做过微信分享的朋友都清楚。

7567917-e3914ff5365a2d2a.png
@Override
public voidonResp(BaseResp resp) {
if(resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
AlertDialog.Builder builder =newAlertDialog.Builder(this);
builder.setTitle(R.string.app_tip);
builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));
builder.show();
}
}
7567917-c52ff27fa681a1f9.png

WXPayEntryActivity里代码比较简单,最重要的就是onResp方法了。resp.errCode是返回的错误码,微信给的描述比较模糊。-1的给的是可能的原因,让人摸不着头脑。我在集成的过程中,遇到两次-1。一次是,在清单文件中,WXpayEntryActivity没有加filter。一次是,签名的问题。在微信后台,我们会填写应用签名,相应的在调起微信支付,也需要用签名一致,而我们在开发的过程中,很可能用的debug的签名,所以也会报-1。
然后就是在调起微信支付的时候,还会有个一个附加的参数extdata。我们在这个界面可以用getIntent().getStringExtra("_wxapi_payresp_extdata");获取在那里传的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值