1.集成微信支付sdk:
在build.gradle中,添加如下依赖
[Java] 查看源文件 复制代码
?
1 | compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+' |
2.设置微信支付回调页面:
路径:项目包名.wxapi
名称:wxpayentryactivity
[Java] 查看源文件 复制代码
?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public class wxpayentryactivity extends activity implements iwxapieventhandler { private iwxapi api; @override public void oncreate(bundle savedinstancestate) { super .oncreate(savedinstancestate); setcontentview(r.layout.wx_pay_result); api = wxapifactory.createwxapi( this , "你的app_id" ); api.handleintent(getintent(), this ); } @override protected void onnewintent(intent intent) { super .onnewintent(intent); setintent(intent); api.handleintent(intent, this ); } @override public void onresp(baseresp resp) { int errcode = resp.errcode; } } |
errcode:说明
0:成功……展示成功页面。
-1:错误……可能的原因:签名错误、未注册appid、项目设置appid不正确、注册的appid与设置的不匹配、其他异常等。
-2:用户取消……无需处理。发生场景:用户不支付了,点击取消,返回app。
3.设置manifest
[Java] 查看源文件 复制代码
?
01 02 03 04 05 06 07 08 09 10 | <activity android:name= ".wxapi.wxpayentryactivity" android:exported= "true" android:launchmode= "singletop" > <intent-filter> <action android:name= "android.intent.action.view" /> <category android:name= "android.intent.category.default" /> <data android:scheme= "你的app_id" /> </intent-filter> </activity> |
4.设置md5
[Java] 查看源文件 复制代码
?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class md5 { private md5() { } public final static string getmessagedigest( byte [] buffer) { char hexdigits[] = { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f' }; try { messagedigest mdtemp = messagedigest.getinstance( "md5" ); mdtemp.update(buffer); byte [] md = mdtemp.digest(); int j = md.length; char str[] = new char [j * 2 ]; int k = 0 ; for ( int i = 0 ; i < j; i++) { byte byte0 = md[i]; str[k++] = hexdigits[byte0 >>> 4 & 0xf ]; str[k++] = hexdigits[byte0 & 0xf ]; } return new string(str); } catch (exception e) { return null ; } } } |
5.发起微信支付
[Java] 查看源文件 复制代码
?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | /** * 注册微信支付 */ private void registerwx() { iwxapi wxapi = wxapifactory.createwxapi(context, null ); wxapi.registerapp( "你的app_id" ); } /** * 发起微信支付 */ private void wxpay() { payreq payreq = new payreq(); payreq.appid = "后台返回的appid" ; payreq.partnerid = "后台返回的partnerid" ; payreq.prepayid = "后台返回的prepayid" ; payreq.packagevalue = "后台返回的package" ; payreq.noncestr = "后台返回的noncestr" ; payreq.timestamp = "后台返回的timestamp" ; payreq.signtype = "后台返回的signtype" ; payreq.sign = signnum(); wxapi.sendreq(payreq); } /** * 拼接sign */ public static string signnum() { string stringa = "appid=" + "后台返回的appid" + "&noncestr=" + "后台返回的noncestr" + "&package=" + "后台返回的package" + "&partnerid=" + "后台返回的partnerid" + "&prepayid=" + "后台返回的prepayid" + "×tamp=" + "后台返回的timestamp" ; string stringsigntemp = stringa + "&key=" + "后台商户服务端的key" ; string sign = md5.getmessagedigest(stringsigntemp.getbytes()).touppercase(); return sign; } |