android接入微信支付(真的很简单,几行代码就搞定了)
2017-03-12 16:12
856 查看
今天我们来说一下接入微信支付这个鬼,因为这也是我第一次写支付的东西,所以我就来捋一下这个玩意儿,也方便日后忘了还能够看一下。我这篇文章呢是跟后台交互的情况下不是什么东西都集成到APP中的。那么我们接下来就开始扯犊子了哈。。。排好队,仔细听。。.。。。。
比如在微信开放平台申请应用这些我们就不说了啊,最重要得到一点就是你的签名一定是正式打包后的
接下来我们进入主题:先看效果图(如下)支付金额不一样是因为后台还没有给我返订单的金额,这个0.01只是测试而已
下图是官方的解释
首先微信支付暴露给我们的是两步,一步是生成预支付订单,然后那个预支付订单id再去调用微信支付,我们有两种方式可以实现,一种是在客户端中处理这些,另一种就是和后台交互,后台给你返回数据解析,当然在实际开发中我们使用的是第二种的方式
那么我接下来就说第二种的实现方式(与后台交互):
1.把官方的jar包导入libs中,也可以直接在build.gradle文件中,添加如下依赖即可:
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.0.2'
}或者
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:1.0.2'
}
(第一个包含统计功能,看你的需求了)
2.添加必要的权限,
<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.p
4000
ermission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3.在应用中注册微信
public class MyApplicion extends Application {
public static final String WXAppid = "你的在微信开放平台申请的appid";
private IWXAPI iwxapi;
@Override
public void onCreate() {
super.onCreate();
//将微信注册到app中
iwxapi = WXAPIFactory.createWXAPI(this, WXAppid, true);
iwxapi.registerApp(WXAppid);
}
}
4.提交相关的数据到服务器,如果成功的话服务器会给你返回相关的appid等等信息
/**
* 提交订单
*
* @param user_id 用户id
* @param user_phone 用户手机
* @param design_name 设计姓名
* @param font_id 签名id
* @param price 价格
* @param setmeal 套餐 (5 :无套餐 1:套餐一 2:套餐二 3:套餐3 4:套餐4)
* @param is_flash 是否需要视频教程 (1.需要 2.不需要)
* @param demeand 要求
* @param pay_id 支付方式(1.支付宝 2.微信)
* @param target_data 完成日期
* @param phone_type 手机类型
* @param update_number 修改次数
*/
private void submitOrder(String user_id, String user_phone, String design_name, int font_id, float price, int setmeal,
int is_flash, String demeand, int pay_id, String target_data, String phone_type, int update_number) {
//HttpUrl.submitOrder:他只是一个网址,写在了另一个工具类中 相当于:String submitOrder="你的服务器提交订单网址"
Request<String> stringRequest = NoHttp.createStringRequest(HttpUrl.submitOrder, RequestMethod.POST);
stringRequest.add("user_id", user_id);
stringRequest.add("user_phone", user_phone);
stringRequest.add("design_name", design_name);
stringRequest.add("font_id", font_id);
stringRequest.add("price", price);
stringRequest.add("setmeal", setmeal);
stringRequest.add("is_flash", is_flash);
stringRequest.add("demeand", demeand);
stringRequest.add("pay_id", pay_id);
stringRequest.add("target_date", target_data);
stringRequest.add("phone_type", phone_type);
stringRequest.add("update_number", update_number);
RequestQueue queue = NoHttp.newRequestQueue();
queue.add(1, stringRequest, new SimpleResponseListener<String>() {
@Override
public void onSucceed(int what, Response<String> response) {
Log.d("XYS", response.toString());
Toast.makeText(PayActivity.this, "上传成功", Toast.LENGTH_SHORT).show();
String json = response.get();
if (response.responseCode() == 200) {
//上传成功后解析服务器返回的商家号签名等等信息
try {
JSONObject jsonObject = new JSONObject(json);
Log.d("xys", json);
JSONObject info = jsonObject.getJSONObject("info");
String appid = info.getString("appid");
String partnerid = info.getString("partnerid");
String bag = info.getString("package");
String prepayid = info.getString("prepayid");
String noncestr = info.getString("noncestr");
String timestamp = info.getString("timestamp");
String sign = info.getString("sign");
wechatPay(appid, partnerid, prepayid, noncestr, timestamp, bag, sign);
Log.d("xys", appid + partnerid + prepayid + noncestr + timestamp + bag + sign);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) {
Toast.makeText(PayActivity.this, "上传失败", Toast.LENGTH_SHORT).show();
}
});
}
5.在微信支付用的按钮里边调用一下方法
case R.id.pay_wx:
比如在微信开放平台申请应用这些我们就不说了啊,最重要得到一点就是你的签名一定是正式打包后的
接下来我们进入主题:先看效果图(如下)支付金额不一样是因为后台还没有给我返订单的金额,这个0.01只是测试而已
下图是官方的解释
首先微信支付暴露给我们的是两步,一步是生成预支付订单,然后那个预支付订单id再去调用微信支付,我们有两种方式可以实现,一种是在客户端中处理这些,另一种就是和后台交互,后台给你返回数据解析,当然在实际开发中我们使用的是第二种的方式
那么我接下来就说第二种的实现方式(与后台交互):
1.把官方的jar包导入libs中,也可以直接在build.gradle文件中,添加如下依赖即可:
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.0.2'
}或者
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:1.0.2'
}
(第一个包含统计功能,看你的需求了)
2.添加必要的权限,
<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.p
4000
ermission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3.在应用中注册微信
public class MyApplicion extends Application {
public static final String WXAppid = "你的在微信开放平台申请的appid";
private IWXAPI iwxapi;
@Override
public void onCreate() {
super.onCreate();
//将微信注册到app中
iwxapi = WXAPIFactory.createWXAPI(this, WXAppid, true);
iwxapi.registerApp(WXAppid);
}
}
4.提交相关的数据到服务器,如果成功的话服务器会给你返回相关的appid等等信息
/**
* 提交订单
*
* @param user_id 用户id
* @param user_phone 用户手机
* @param design_name 设计姓名
* @param font_id 签名id
* @param price 价格
* @param setmeal 套餐 (5 :无套餐 1:套餐一 2:套餐二 3:套餐3 4:套餐4)
* @param is_flash 是否需要视频教程 (1.需要 2.不需要)
* @param demeand 要求
* @param pay_id 支付方式(1.支付宝 2.微信)
* @param target_data 完成日期
* @param phone_type 手机类型
* @param update_number 修改次数
*/
private void submitOrder(String user_id, String user_phone, String design_name, int font_id, float price, int setmeal,
int is_flash, String demeand, int pay_id, String target_data, String phone_type, int update_number) {
//HttpUrl.submitOrder:他只是一个网址,写在了另一个工具类中 相当于:String submitOrder="你的服务器提交订单网址"
Request<String> stringRequest = NoHttp.createStringRequest(HttpUrl.submitOrder, RequestMethod.POST);
stringRequest.add("user_id", user_id);
stringRequest.add("user_phone", user_phone);
stringRequest.add("design_name", design_name);
stringRequest.add("font_id", font_id);
stringRequest.add("price", price);
stringRequest.add("setmeal", setmeal);
stringRequest.add("is_flash", is_flash);
stringRequest.add("demeand", demeand);
stringRequest.add("pay_id", pay_id);
stringRequest.add("target_date", target_data);
stringRequest.add("phone_type", phone_type);
stringRequest.add("update_number", update_number);
RequestQueue queue = NoHttp.newRequestQueue();
queue.add(1, stringRequest, new SimpleResponseListener<String>() {
@Override
public void onSucceed(int what, Response<String> response) {
Log.d("XYS", response.toString());
Toast.makeText(PayActivity.this, "上传成功", Toast.LENGTH_SHORT).show();
String json = response.get();
if (response.responseCode() == 200) {
//上传成功后解析服务器返回的商家号签名等等信息
try {
JSONObject jsonObject = new JSONObject(json);
Log.d("xys", json);
JSONObject info = jsonObject.getJSONObject("info");
String appid = info.getString("appid");
String partnerid = info.getString("partnerid");
String bag = info.getString("package");
String prepayid = info.getString("prepayid");
String noncestr = info.getString("noncestr");
String timestamp = info.getString("timestamp");
String sign = info.getString("sign");
wechatPay(appid, partnerid, prepayid, noncestr, timestamp, bag, sign);
Log.d("xys", appid + partnerid + prepayid + noncestr + timestamp + bag + sign);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) {
Toast.makeText(PayActivity.this, "上传失败", Toast.LENGTH_SHORT).show();
}
});
}
/** * @param appid 微信分配的公众账号ID * @param partnerid 微信支付分配的商户号 * @param prepayid 微信返回的支付 交易会话ID * @param noncestr 随机字符串,不长于32位。推荐随机数生成算法 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=4_3 * @param timestamp 时间戳,请见接口规则-参数规定 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=4_2 * @param packageX 暂填写固定值Sign=WXPay * @param sign 签名,详见签名生成算法 */ protected void wechatPay(String appid, String partnerid, String prepayid, String noncestr, String timestamp, String packageX, String sign) { PayReq req = new PayReq(); IWXAPI iwxapi = WXAPIFactory.createWXAPI(this, WXAppid); req.appId = appid; req.partnerId = partnerid; req.prepayId = prepayid; req.nonceStr = noncestr; req.timeStamp = timestamp; req.packageValue = packageX; req.sign = sign; // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信 iwxapi.sendReq(req); }
5.在微信支付用的按钮里边调用一下方法
case R.id.pay_wx:
//调用提交订单的方法 submitOrder("2", "15110027513", name, 1, money, 5, 1, "没要求", 2, "12.23",band + models, 1); break;这就搞定了,根本不需要你懂什么,只需要几行代码就可以搞定,其他的都是后台做的事,跟我们就无关,欢迎借鉴哈
相关文章推荐
- 超简单的几行代码搞定Android底部导航栏功能
- BaseHttpListActivity,几行代码搞定Android Http列表请求、加载和缓存
- android 史上最简单的下拉选择菜单DropDownMenu 几行代码轻松搞定!
- 几行代码搞定Android底部导航栏
- Android:PopupWindow工具类,调用几行代码搞定
- 底部导航栏:超简单,几行代码搞定Android底部导航栏
- BaseHttpListActivity,几行代码搞定Android Http列表请求、加载和缓存
- 几行代码搞定Android底部导航栏
- 几行代码看程序员的水平——Android文件命名规范
- thinkphp实现分页类 几行代码搞定
- 几行代码轻松搞定网页的简繁转换
- 几行代码搞定python 设计模式[转]
- 几行代码看程序员的水平——Android文件命名规范
- 几行代码轻松搞定网页简繁转换
- Jquery的Tabs内容轮换效果实现代码,几行搞定
- Android手机拨打电话、手动发送短信与自动拨打电话、自动发送短信(代码很简单哦)
- Android联网操作中几行代码的解释
- 几行代码看程序员的水平——Android文件命名规范
- 几行代码轻松搞定网页的简繁转换(转载)
- 几行代码轻松搞定网页的简繁转换