Android微信支付开发流程

Android微信支付开发流程

需要内容:

账号信息:appId,appKey,mchId(商户号)

libammsdk.jar包  MD5.java类

开发步骤:

1、libammsdk.jar包  MD5.java类拷入项目,将jar包AddLibrary;

2、在清单文件中:

   <!--微信支付权限-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

3、在跟包名下创建wxapi包,在该包内新建WXPayEntryActivity,并实现IWXAPIEventHandler接口,在清单文件中注册,exported设置为true

<!-- 微信支付回调页-->
<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:launchMode="singleTop"/>

4、创建微信广播接收器,并在清单文件注册

public classAppRegister extendsBroadcastReceiver {

   @Override
   public voidonReceive(Context context,Intent intent) {
      finalIWXAPI api = WXAPIFactory.createWXAPI(context, null);
       api.registerApp(WXPayConfig.APP_ID);
   }
}

//==========================================================

<!-- 微信支付-->
<receiver android:name="com.mykj.qupingfang.pay.WXPay.AppRegister">
    <intent-filter>
        <action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP"/>
    </intent-filter>
</receiver>

5、选择商品 下单

   注册微信api

// 创建PayReq对象
req =new PayReq();
// 创建IWXAPI对象
msgApi = WXAPIFactory.createWXAPI(context, null);
// 使用app_id注册app
msgApi.registerApp(WXPayConfig.APP_ID);

6、将订单信息传给服务器,服务器返回prepayId(预支付订单号,很重要)如:

getUserOrderFromServer();

 

 

7、拿到prepayId后,在客户端对订单生成签名


req.appId= WXPayConfig.APP_ID;
req.partnerId= WXPayConfig.MCH_ID;
req.prepayId= order.data.prepay_id;
req.packageValue= "Sign=WXPay";
req.nonceStr= genNonceStr();
req.timeStamp= String.valueOf(genTimeStamp());

@SuppressWarnings("deprecation")
List<NameValuePair> signParams = new LinkedList<NameValuePair>();
signParams.add(newBasicNameValuePair("appid",req.appId));
signParams.add(newBasicNameValuePair("noncestr",req.nonceStr));
signParams.add(newBasicNameValuePair("package",req.packageValue));
signParams.add(newBasicNameValuePair("partnerid",req.partnerId));
signParams.add(newBasicNameValuePair("prepayid",req.prepayId));
signParams.add(newBasicNameValuePair("timestamp",req.timeStamp));

req.sign= genAppSign(signParams);

8、使用PayReq调起微信支付界面,开始支付

boolean open = msgApi.sendReq(req);

9、WXPayEntryActivity中收到支付回调(此Activity可作为支付完成界面)

9.1 、onCreate方法中,注册api

api = WXAPIFactory.createWXAPI(this,WXPayConfig.APP_ID);
api.handleIntent(getIntent(), this);

9.2、在onNewIntent中

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    api.handleIntent(intent, this);
}

9.3 onResp方法中,收到支付结果(此方法在子线程中执行,若刷新UI,需回到主线程)

resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX

条件下

resp.errCode==0    : 支付成功

resp.errCode== -1   : 支付未完成

resp.errCode== -2   : 支付失败

10、支付成功后,可再次请求服务器是否成功,都成功,则此次支付成功完成,有一方未成功,应排查失败原因。

11、完成!

 

支付流程图

Android微信支付开发流程