您的位置:首页 > 移动开发 > 微信开发

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();
}
});
}

/**
* @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;
这就搞定了,根本不需要你懂什么,只需要几行代码就可以搞定,其他的都是后台做的事,跟我们就无关,欢迎借鉴哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: