为便于观察,需要添加哪些到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的,一些布局文件自己去补充