Android第三方支付--微信支付
2016-02-03 11:08
766 查看
转载请标明出处:
/article/9821605.html;
本文出自:【fshsoft的CSDN博客】
做了微信支付,下载了Demo,发现和之前有所改动,v3.0的版本,也许有的朋友还在摸索,这里我已经成功支付,话不多说,直接进入主题:
一:首先要在微信开发平台注册账号,新增应用,填写正确的包名,正确的签名(MD5中的一串字符冒号去掉,全部小写),当然也会生成的AppID和AppSecret都有用!最后还要花300大洋开通支付功能!
二:分析一下微信支付的流程
三:界面交互流程
上面都看明白了,接下来就是写代码了
四:这里必须要有wxapi这个包名,同时必须有WXPayEntryActivity这个类名
五:在AndroidManifest.xml里面配置相关信息
六:在WXPayEntryActivity类里面成功之后回调方法onResp()
最后做完之后,一定要签名打包,这个是微信的独家秘笈,你忘了就会跳出-1,呵呵。
最后总结一下支付返回-1的情况
1.检查微信后台的签名,包名是否正确
2.工程是否签名打包
3.如果之前做过测试显示过-1的情况,必须清除微信的清除数据,重新登录微信
4.后台服务器是否按照要求第一次签名,第二次签名,如果第二次签名不对,那我们就自己再次签名一次,我的代码里面写了
以上就是微信支付的全部内容,如果大家还有什么问题可以给我留言交流。谢谢!
/article/9821605.html;
本文出自:【fshsoft的CSDN博客】
做了微信支付,下载了Demo,发现和之前有所改动,v3.0的版本,也许有的朋友还在摸索,这里我已经成功支付,话不多说,直接进入主题:
一:首先要在微信开发平台注册账号,新增应用,填写正确的包名,正确的签名(MD5中的一串字符冒号去掉,全部小写),当然也会生成的AppID和AppSecret都有用!最后还要花300大洋开通支付功能!
二:分析一下微信支付的流程
三:界面交互流程
上面都看明白了,接下来就是写代码了
四:这里必须要有wxapi这个包名,同时必须有WXPayEntryActivity这个类名
五:在AndroidManifest.xml里面配置相关信息
<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"/> <!-- 启动主页面 --> <activity android:name=".ui.activity.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="wx487898a262d23df3" /> </intent-filter> </activity> <activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:label="@string/title_activity_wxpayentry" android:launchMode="singleTop" /> <receiver android:name=".wxpay.AppRegister" android:permission="com.tencent.mm.plugin.permission.SEND" > <intent-filter> <action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" /> </intent-filter> </receiver>
/** * 首先调用接口,要把一些基本信息作为参数传给服务器 * 比如:金额fee,用户id,标题title等 * 调用成功之后会返回微信所需要的参数,如: * appid,noncestr,package,partnerid,prepayid, * timestamp,sign * 微信支付 */ StringBuffer sb = new StringBuffer(); WeixinPay wpay; private AlertDialog mDialog; private AlertDialog.Builder builder; public void weixinPay() { // 通过WXAPIFactory工厂,获取IWXAPI的实例 api = WXAPIFactory.createWXAPI(this, Constants.APP_ID); // 将该app注册到微信 api.registerApp(Constants.APP_ID); // 调用接口 Params p = new Params(); p.put("fee",fee); p.put("spbill_create_ip", NetWorkUtils.getLocalIpAddress(this)); String value = "商品标题 " + title; try { String title = new String(value.getBytes("UTF-8")); p.put("body", title); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } p.put("userId", O.getUser().getId()); p.post(C.URL.WEIXIN_PAY, new ReHandler() { @Override public void onSuccess(NetEntity entity) { wpay = entity.toObj(WeixinPay.class); PayReq req = new PayReq(); req.appId = wpay.getAppid();// 微信appId req.packageValue = wpay.getPackageValue();// 包 req.extData = "app data"; // optional req.timeStamp = wpay.getTimeStamp();// 时间戳 req.partnerId = wpay.getPartnerId();// 商户号" req.prepayId = wpay.getPrepayId();// 预支付订单号 req.nonceStr = wpay.getNonceStr();// 随机字符串 req.sign = wpay.getSign();// 后台返回的签名 // 本地再次签名 List<NameValuePair> signParams = new LinkedList<NameValuePair>(); signParams.add(new BasicNameValuePair("appid", req.appId)); signParams.add(new BasicNameValuePair("noncestr", req.nonceStr)); signParams.add(new BasicNameValuePair("package",req.packageValue)); signParams.add(new BasicNameValuePair("partnerid",req.partnerId)); signParams.add(new BasicNameValuePair("prepayid", req.prepayId)); signParams.add(new BasicNameValuePair("timestamp",req.timeStamp)); req.sign = genAppSign(signParams); // 调微信支付 if(api.isWXAppInstalled()&&api.isWXAppSupportAPI()){ api.sendReq(req); }else{ builder = new AlertDialog.Builder(WXPayEntryActivity.this); builder.setNeutralButton("关闭", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mDialog.dismiss(); } }).setTitle("友情提醒").setMessage("请安装微信客户端"); mDialog = builder.create(); mDialog.show(); } } @Override public void onStart() { } @Override public void onFailure(String message) { } }); } private String genAppSign(List<NameValuePair> params) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < params.size(); i++) { sb.append(params.get(i).getName()); sb.append('='); sb.append(params.get(i).getValue()); sb.append('&'); } sb.append("key="); sb.append(Constants.API_KEY); this.sb.append("sign str\n" + sb.toString() + "\n\n"); String appSign = MD5.getMessageDigest(sb.toString().getBytes()); Log.e("orion", appSign); return appSign; }
六:在WXPayEntryActivity类里面成功之后回调方法onResp()
@Override public void onResp(BaseResp resp) { Log.d(TAG, "onPayFinish, errCode = " + resp.errCode); if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { if(resp.errCode==-2){ Toast.makeText(this,"取消付款!", Toast.LENGTH_LONG).show(); } if(resp.errCode==-1){ Toast.makeText(this,"支付错误!", Toast.LENGTH_LONG).show(); } if(resp.errCode==0){ queryOrder();//查询接口调用后台服务器查询是否成功 } }
最后做完之后,一定要签名打包,这个是微信的独家秘笈,你忘了就会跳出-1,呵呵。
最后总结一下支付返回-1的情况
1.检查微信后台的签名,包名是否正确
2.工程是否签名打包
3.如果之前做过测试显示过-1的情况,必须清除微信的清除数据,重新登录微信
4.后台服务器是否按照要求第一次签名,第二次签名,如果第二次签名不对,那我们就自己再次签名一次,我的代码里面写了
以上就是微信支付的全部内容,如果大家还有什么问题可以给我留言交流。谢谢!
相关文章推荐
- 微信企业号开发(六)---邀请成员关注
- 微信企业号开发(五)--成员管理,增删改查
- 为什么微信要将电话功能限制在国外?
- android实现微信自动抢红包
- 微信关闭了QQ好友导入功能
- android 微信支付获取sign的注意事项
- 微信支付错误两个问题的解决:curl出错,错误码:60
- 王学岗ViewPager——仿微信版(一)
- 微信企业号开发(四)-管理部门,增删改查
- audio 自动播放 iPhone微信客户端
- Android-黑科技-微信抢红包必备软件
- 微信公众号变现方式
- 微信生态圈的发展分析
- 微信开放平台全网发布61009错误处理
- 【Android实战】移动支付(微信、支付宝、银联)集成
- 从 0 到 1:微信后台系统的演进之路
- 微信开发中的cdta
- iOS 集成微信开放平台 sdk 编译不过
- perl 微信取自己的ID
- Android微信支付步骤简述