官方文档
1.打包项目获取签名(签名工具)
2.导入微信支付的lib.jar包
3.获得微信公众平台id;
//微信开放平台和商户约定的密钥
private String app_wx_secret_key=”db426a9829e4b49a0dcac7b4162da6b6”;
//微信公众平台商户模块和商户约定的密钥
private String app_wx_parent_key=”8934e7d15453e97507ef794cf7b0519d”;
//微信公众平台商户模块和商户约定的支付密钥
private String app_wx_pay_key=”L8LrMqqeGRxST5reouB0K66CaYAWpqhAVsq7ggKkxHCOastWksvuX1uvmvQclxaHoYd3ElNBrNO2DHnnzgfVG9Qs473M3DTOZug5er46FhuGofumV8H2FVR9qkjSlC5K”;
//商户id
private String app_tx_parent_key = “1900000109”; `
4.清单注册,导入WXPayEntryActivity类
<!-- 微信支付-->
<activity android:name=".wxapi.WXPayEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="设置自己的APP_id" />
</intent-filter>
</activity>
5.统一订单
官方文档要去服务后台生成预支付交易单然后由前端从接口中获取
当然如果不怕安全问题可以自己生成(暂时不提供,后期增加)
6.调起支付接口
如果后台给你提供了一个获取统一订单接口的话.您可以直接从接口中获取主要的几个参数和值
private void requestPay(JSONObject json){
IWXAPI iwxapi=WXAPIFactory.createWXAPI(this,Constants.App_ID);
if (!iwxapi.isWXAppInstalled()){
Toast.makeText(PayActivity.this,"没有安装微信",Toast.LENGTH_SHORT).show();
return;
}
iwxapi.registerApp(Constants.App_ID);
PayReq resp=new PayReq();
try {
JSONObject data=json.getJSONObject("data");
resp.appId=data.getString("appid");
resp.partnerId=data.getString("mch_id");
resp.prepayId=data.getString("prepay_id");
resp.packageValue="Sign=WXPay";
resp.nonceStr=data.getString("nonce_str");
resp.timeStamp=genTimeStamp()+"";
SortedMap<Object,Object> parameters = new TreeMap<Object,Object>();
parameters.put("appid", data.getString("appid"));
parameters.put("partnerid", data.getString("mch_id"));
parameters.put("prepayid",data.getString("prepay_id"));
parameters.put("noncestr",data.getString("nonce_str"));
parameters.put("package","Sign=WXPay");
parameters.put("timestamp",genTimeStamp()+"");//时间生成
String characterEncoding = "UTF-8";
String sign = createSign(characterEncoding,parameters);//生成签名 根据上面的参数获取sign 记得排序
resp.sign=sign;
}
catch (Exception e){
e.printStackTrace();
}
iwxapi.sendReq(resp);
}
/**
* 生成签名
* @param characterEncoding
* @param parameters
* @return
*/
public static String createSign(String characterEncoding,SortedMap<Object,Object> parameters){
StringBuffer sb = new StringBuffer();
Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序(升序)
Iterator it = es.iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
String k = (String)entry.getKey();
Object v = entry.getValue();
if(null != v && !"".equals(v)
&& !"sign".equals(k) && !"key".equals(k)) {
sb.append(k + "=" + v + "&");
}
}
//商户key
sb.append("key="+Constants.MCH_API_KEY);
//大写
String packageSign = MD5.getMessageDigest(sb.toString().getBytes()).toUpperCase();
return packageSign;
}
//时间
private long genTimeStamp() {
return System.currentTimeMillis()/1000;
}
根据官方文档要一步一步进行设置.
7.设置回调
WXPayEntryActivity.class中设置
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
//根据获取的resp.errCode值
//-1 签名错误之类的错误.这就需要自己好好查看自己的代码了
//0 支付成功
//-2 取消支付
}
认真查看官方文档.一个字一个字的看