Android支付——微信支付总结
来源:互联网 发布:底层数据读取错误率 编辑:程序博客网 时间:2024/06/06 16:45
1、准备工作
在微信开放平台进行登记,登记并选择移动应用进行设置后,将该应用提交审核,只有审核通过的应用才能进行开发。
微信支付的开发方式和支付宝不同,微信支付在客户端不需要太多的操作,大多依赖于服务器端。
2、导入jar包
将libammsdk.jar包放入应用工程的libs目录下。
3、修改AndroidManifest.xml文件
在AndroidManifest.xml文件中添加如下代码:
<!-- ==================== 微信支付配置开始 ==================== --> <activity android:name="com.subzero.copass.wxapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop" /> <!-- ==================== 微信支付配置结束 ==================== -->
* 注意:添加启动模式 android:launchMode=”singleTop”。
添加权限:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
4、创建结果回调页
pay_result.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#FFE1E8EB" android:gravity="center_horizontal"> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:textColor="#ff000000" android:textSize="20dp" android:text="这个界面用于显示第三方app通过微信支付的结果"/></LinearLayout>
5、支付结果回调类
需要注意的是这个类必须放在包名为**.wxapi里面。例:包名com.subzero.copass (com.subzero.copass .wxapi.WXPayEntryActivity),否则微信支付结果不会调用这个类来回调微信的支付结果。
微信支付回调的结果resp.errCode。
WXPayEntryActivity.java
/** * 微信支付完成后回调onResp函数 * 此类必须放在包名.wxapi里面。例:包名com.subzero.copass (com.subzero.copass .wxapi.WXPayEntryActivity); */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); //微信APP_ID api = WXAPIFactory.createWXAPI(this, PayConfig.APP_ID); api.handleIntent(getIntent(), this); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } @Override public void onReq(BaseReq req) { } @Override public void onResp(BaseResp resp) { Log.d(TAG, "onPayFinish, errCode = " + resp.errCode); String msg = ""; if (resp.errCode == 0) { msg = "支付成功"; } else if (resp.errCode == -1) { msg = "已取消支付"; } else if (resp.errCode == -2) { msg = "支付失败"; } Toast.makeText(WXPayEntryActivity.this, msg, Toast.LENGTH_SHORT).show(); finish(); }}
6、调起支付
微信支付的步骤是先调用服务器接口,由服务器调用接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再在APP里面调起支付。
微信支付需要手机安装有微信的客户端。如果没有安装微信客户端,无法调起支付。
api.sendReq(req);发送请求或发送响应到微信终端,可以通过IWXAPI的 sendReq 和 sendResp 两个方法来实现。
此接口为微信官方测试接口。实际的微信支付功能请您在支付时调起应用后台的接口获取相应数据并使用api.sendReq(req);方法调起微信支付。
private IWXAPI api; // IWXAPI 是第三方app和微信通信的openapi接口 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pay); //微信appId api = WXAPIFactory.createWXAPI(context, PayConfig.APP_ID); Button appayBtn = (Button) findViewById(R.id.appay_btn); appayBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android; Toast.makeText(PayActivity.this, "获取订单中...", Toast.LENGTH_SHORT).show(); try{ byte[] buf = Util.httpGet(url); if (buf != null && buf.length > 0) { String content = new String(buf); Log.e("get server pay params:",content); JSONObject json = new JSONObject(content); if(null != json && !json.has("retcode") ){ PayReq req = new PayReq(); //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将应用注册到微信 api.sendReq(req); }else{ Log.d("PAY_GET", "返回错误"+json.getString("retmsg")); Toast.makeText(PayActivity.this, "返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show(); } }else{ Log.d("PAY_GET", "服务器请求错误"); Toast.makeText(PayActivity.this, "服务器请求错误", Toast.LENGTH_SHORT).show(); } }catch(Exception e){ Log.e("PAY_GET", "异常:"+e.getMessage()); Toast.makeText(PayActivity.this, "异常:"+e.getMessage(), Toast.LENGTH_SHORT).show(); } payBtn.setEnabled(true); } }); }
此图为APP端调起支付的参数列表。
注意:微信支付需要打包APK,否则无法调起微信客户端进行支付,只能在你未登录微信的情况下调起微信登录!
- Android支付——微信支付总结
- 微信支付,支付宝支付,银联支付——三大支付总结
- android 微信、支付宝支付总结
- Android 微信支付总结
- Android移动支付——微信支付
- android移动支付——微信支付
- Android第三方支付——微信支付
- 微信支付——jaspi支付
- 微信支付——jspi支付
- Android微信支付、支付宝接入总结
- Android平台,支付宝和微信app支付总结
- android微信支付返回-1,支付失败总结!
- Android——微信支付
- 微信支付总结
- 微信支付总结
- 微信支付总结
- android微信支付问题总结
- android微信支付(问题总结)
- PSR-3 日志接口
- 利用c语言将一个文件中满足某条件的数据 保存到另外一个文件中
- 奋斗吧,程序员——第十一章 只愿君心似我心,定不负相思意
- C++ std::string和C字符串之间的问题
- OpenCV实现USM锐化
- Android支付——微信支付总结
- nrf51822---主从一体通信(3)
- 极客学院Hadoop入门视频知识总结
- Java学习之多线程
- max os x下查找java_home
- 奋斗吧,程序员——第十二章 一日不见兮,思之如狂
- windows server2008下安装wampserver注意问题
- Android RecyclerView 使用完全解析 体验艺术般的控件
- 安装和配置ROS环境