微信支付的集成

来源:互联网 发布:baba yetu 知乎 编辑:程序博客网 时间:2024/05/04 04:18


为便于观察,需要添加哪些到AS中,需要先导入DEMO工程到eclipse中

1.导入jar包



2.清单文件声明权限和activity

清单文件AndroidManifest.xml中声明权限和activity:

<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"/>

 

   <activity

   android:name="net.sourceforge.simcpux.wxapi.WXPayEntryActivity"

   android:exported="true"

   android:launchMode="singleTop"/>

 

注意上述声明的activity(WXPayEntryActivity)不在jar包中,所以我们需要从demo

拷贝WXPayEntryActivity.java文件放到我们工程中,包名要保持不变

 

3调用微信支付sdk

赋值后调用sendReq完成支付

/**调用微信支付*/

public void sendPayRequest() {

    PayReq req = new PayReq();

    req.appId = payInfo.getAppId();

    req.partnerId = payInfo.getPartnerId();

    req.prepayId = payInfo.getPrepayId();

    req.nonceStr = payInfo.getNonceStr();

    req.timeStamp = payInfo.getTimestamp();

    req.packageValue = payInfo.getPackageValue();

    req.sign = payInfo.getSign();

    // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信

    //3.调用微信支付sdk支付方法

    api.sendReq(req);

}

4 处理支付结果

在net.sourceforge.simcpux.wxapi.WXPayEntryActivity.java类的onResp方法中处理支付结果:

注意上述类不是jar包中的,需要我们从demo中拷贝到自己项目中:

 

@Override

public void onResp(BaseResp resp) {

    Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);

    //支付成功

    if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {

        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setTitle("支付结果");

        builder.setMessage(resp.errCode + "");

        builder.show();

    }

}

示例代码如下:

public class MainActivity extends AppCompatActivity {    private String url;    public WeiBean payInfo;    private IWXAPI api;    @Override    public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//本例子下面的url接口是微信Demo中给的url,引用是为了能运行,因为自己的应用审核可能不通过,你需要使用自己//公司通过审核应用的接口url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android";api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);    }    public void weiPay(View view){RequestQueue queue = Volley.newRequestQueue(this);StringRequest request = new StringRequest(url, new Response.Listener<String>() {    @Override    public void onResponse(String s) {//解析数据,获取支付串码//先将返回的JSON字符串进行替换操作s = s.replace("package","packageValue");WeiBean weiBean = JSON.parseObject(s, WeiBean.class);//获取支付串码payInfo = weiBean;//调用第三方支付SDK的方法sendPayRequest();    }}, new Response.ErrorListener() {    @Override    public void onErrorResponse(VolleyError volleyError) {Log.e("volleyError",volleyError.toString());    }});queue.add(request);    }    /**调用微信支付*/    public void sendPayRequest() {PayReq req = new PayReq();req.appId = payInfo.getAppid();req.partnerId = payInfo.getPartnerid();req.prepayId = payInfo.getPrepayid();req.nonceStr = payInfo.getNoncestr();req.timeStamp = payInfo.getTimestamp();req.packageValue = payInfo.getPackageValue();req.sign = payInfo.getSign();// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信//3.调用微信支付sdk支付方法api.sendReq(req);    }}

注意,上面的Constant类是引用了微信DEMO的,一些布局文件自己去补充



1 0