Android集成微信支付

来源:互联网 发布:软件开发人员薪酬 编辑:程序博客网 时间:2024/05/23 19:14

现在微信支付和支付宝支付已经为移动端支付的主流,上一篇就已经介绍了集成支付宝的流程,本篇不要介绍微信支付是怎么集成的。

 首先:需要到微信支付开放平台申请APPID  需要应用下载地址  应用签名(利用官方提供工具,安装到手机上,在手机上获取),应用的包名必须和上线包名一样


1.到微信支付开发平台下载微信支付Demo

2.导入微信支付Demo,并运行,效果如下:


Demo可以完全支付了说明现在的Demo就已经完全配置好了微信的开发环境了,我们只需要参照这个Demo去配置我们自己的项目即可。
注:测试的Demo只支持调起一起微信支付,如需第二次可在系统设置中清除微信缓存数据即可。

3.创建一个Android项目,界面如下:


activity_main.xml如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"     android:orientation="vertical">        <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="微信支付"        android:onClick="weixinPay" /></LinearLayout>

MainActivity.java如下:

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void weixinPay(View v) {}}

4.配置微信开发环境:

a)把微信Demo中的“libammsdk.jar”复制到我们的项目中

b)把微信Demo中的清单文件中的权限复制到我们的项目中

²  把微信Demo中的清单文件中声明的支付相关的Activity声明复制到我们的项目中。注意,微信支付需要的Activity比较特殊,只需要一个WXPayEntryActivity,这个Activity用于接收微信支付结果,这个Activity不是在jar包中的,是在Demo源码中的,我们需要把Demo中的这个Activity复制到我们的项目中,这个类名不能改,且必须放到我们项目根包下面的wxapi包下。


清单文件:

  <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注册
<activity            android:name=".wxapi.WXPayEntryActivity"            android:exported="true"            android:launchMode="singleTop"/>


package com.itheima.a14wechatpay.wxapi;import android.app.Activity;import android.app.AlertDialog;import android.content.Intent;import android.os.Bundle;import android.util.Log;import com.itheima.a14wechatpay.Constants;import com.itheima.a14wechatpay.R;import com.tencent.mm.sdk.constants.ConstantsAPI;import com.tencent.mm.sdk.modelbase.BaseReq;import com.tencent.mm.sdk.modelbase.BaseResp;import com.tencent.mm.sdk.openapi.IWXAPI;import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;import com.tencent.mm.sdk.openapi.WXAPIFactory;/** * 这个Activity用于接收支付结果 */public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";    private IWXAPI api;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.pay_result);            api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);        api.handleIntent(getIntent(), this);    }@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);        api.handleIntent(intent, this);}@Overridepublic void onReq(BaseReq req) {}/** 这个方法用于接收支付结果,同步结果 */@Overridepublic void onResp(BaseResp resp) {// TODO 发请求问自己公司服务器是否支付成功if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("提示");builder.setMessage("微信支付结果: " + resp.errCode);builder.show();}}}

Constants类 
public class Constants {// APP_ID 替换为你的应用从官方网站申请到的合法appId    public static final String APP_ID = "wxd930ea5d5a258f4f";}
5.找到微信Demo中下面的按钮对应的点击事件:

参照这个Activity完成对应的功能,如下:

public class MainActivity extends Activity {private IWXAPI api;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);api = WXAPIFactory.createWXAPI(this, "wxb4ba3c02aa476ea1");}public void weixinPay(View v) {     //===========================================修改成服务器的地址String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android";Toast.makeText(this, "获取订单中...", Toast.LENGTH_SHORT).show();Listener<String> listener = new Listener<String>() {@Overridepublic void onResponse(String response) {try {weixinPay(response);} catch (Exception e) {e.printStackTrace();}}};ErrorListener errorListener = new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error) {Log.e("PAY_GET", "异常:"+error.getMessage());}};Request<String> request = new StringRequest(url, listener, errorListener);Volley.newRequestQueue(this).add(request);}protected void weixinPay(String response) throws Exception {// 将该app注册到微信    api.registerApp(Constants.APP_ID); boolean isPaySupported = api.getWXAppSupportAPI() >= Build.PAY_SUPPORTED_SDK_INT;if (!isPaySupported) {Toast.makeText(this, "你没有安装微信或者你的微信版本太老", 0).show();return;}JSONObject json = new JSONObject(response); if(null != json && !json.has("retcode") ){PayReq req = new PayReq();//req.appId = "wxf8b4f85f3a794e77";  // 测试用appIdreq.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"; // optionalToast.makeText(MainActivity.this, "正常调起支付", Toast.LENGTH_SHORT).show();// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信api.sendReq(req);}else{        Log.d("PAY_GET", "返回错误"+json.getString("retmsg"));        Toast.makeText(MainActivity.this, "返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show();}}}

到此就已经成功集成微信支付了。

支付宝支付流程在上一篇,。地址如下

http://blog.csdn.net/wangxiaohuhu1314/article/details/76191157



原创粉丝点击